最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot3?ResponseEntity?完全使用案例

 更新時間:2025年12月03日 11:32:06   作者:張較瘦_  
ResponseEntity是SpringBoot中控制HTTP響應(yīng)的核心工具——它能讓你精準定義響應(yīng)狀態(tài)碼、響應(yīng)頭、響應(yīng)體,相比直接返回實體類或字符串,靈活性和規(guī)范性提升一個量級,本文介紹Springboot3?ResponseEntity?完全使用教程,感興趣的朋友跟隨小編一起看看吧

Spring Boot 3 ResponseEntity 完全使用教程

Springboot3 | 統(tǒng)一返回類設(shè)計:從問題到實現(xiàn)一文中,我們通過自定義設(shè)計實現(xiàn)了標準化響應(yīng)封裝類,該方案有效確保了RESTful接口響應(yīng)數(shù)據(jù)結(jié)構(gòu)的統(tǒng)一性。值得關(guān)注的是,Spring Boot框架本身也提供了類似的標準化響應(yīng)機制實現(xiàn)方案。
ResponseEntity 是 Spring Boot 中控制 HTTP 響應(yīng)的核心工具——它能讓你精準定義響應(yīng)狀態(tài)碼、響應(yīng)頭、響應(yīng)體,相比直接返回實體類或字符串,靈活性和規(guī)范性提升一個量級。接下來我會用最易懂的方式,結(jié)合寵物(Pet)管理的實際場景,帶你掌握 ResponseEntity 的所有核心用法。

前置準備

1. 項目基礎(chǔ)依賴(Maven)

首先確保你的 Spring Boot 3 項目引入了核心依賴(以 3.2.x 版本為例):

<dependencies>
    <!-- Spring Boot Web 核心 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- Lombok 簡化實體類代碼 -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <!-- 參數(shù)校驗(用于后續(xù)異常場景) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
</dependencies>

2. 核心實體類 Pet

補全 Pet 類(添加 Lombok 注解簡化 getter/setter,參數(shù)校驗注解用于后續(xù)案例):

import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
@Data // 自動生成getter、setter、toString等方法
public class Pet {
    private Long id;         // 寵物ID(唯一標識)
    @NotBlank(message = "寵物名稱不能為空")
    private String name;     // 寵物名稱
    @NotBlank(message = "寵物品種不能為空")
    private String breed;    // 寵物品種(如"金毛"、"布偶貓")
    @Min(value = 0, message = "寵物年齡不能為負數(shù)")
    private Integer age;     // 寵物年齡(單位:歲)
}

3. 模擬數(shù)據(jù)層(簡化案例,無需數(shù)據(jù)庫)

創(chuàng)建一個簡單的 PetService 模擬內(nèi)存數(shù)據(jù)操作,避免引入數(shù)據(jù)庫復(fù)雜度:

import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
@Service
public class PetService {
    // 模擬數(shù)據(jù)庫存儲寵物數(shù)據(jù)
    private static final Map<Long, Pet> PET_MAP = new HashMap<>();
    // 初始化測試數(shù)據(jù)
    static {
        PET_MAP.put(1L, new Pet(1L, "旺財", "金毛", 3));
        PET_MAP.put(2L, new Pet(2L, "咪寶", "布偶貓", 2));
    }
    // 根據(jù)ID查詢寵物
    public Pet getPetById(Long id) {
        return PET_MAP.get(id);
    }
    // 新增寵物
    public Pet addPet(Pet pet) {
        long newId = PET_MAP.size() + 1;
        pet.setId(newId);
        PET_MAP.put(newId, pet);
        return pet;
    }
    // 刪除寵物
    public boolean deletePet(Long id) {
        return PET_MAP.remove(id) != null;
    }
}

核心場景案例(結(jié)合ApiPost測試)

接下來的所有案例,都基于 PetController 實現(xiàn),每個場景對應(yīng)一個真實的 HTTP 業(yè)務(wù)場景,同時給出 ApiPost 測試步驟。

場景1:查詢單個寵物(成功返回200)

業(yè)務(wù)需求:根據(jù)寵物ID查詢詳情,存在則返回 200 OK + 寵物數(shù)據(jù)。
Controller 代碼

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/pets")
public class PetController {
    @Autowired
    private PetService petService;
    // 場景1:查詢單個寵物(成功返回200)
    @GetMapping("/{id}")
    public ResponseEntity<Pet> getPet(@PathVariable Long id) {
        Pet pet = petService.getPetById(id);
        // ResponseEntity.ok() 等價于 ResponseEntity.status(200).body(pet)
        return ResponseEntity.ok(pet);
    }
}

ApiPost 測試步驟

  • 新建請求,請求方式選擇 GET,URL 填寫 http://localhost:8080/pets/1
  • 點擊「發(fā)送」,查看響應(yīng):
    • 狀態(tài)碼:200 OK;
    • 響應(yīng)體:
{
    "id": 1,
    "name": "旺財",
    "breed": "金毛",
    "age": 3
}

場景2:新增寵物(成功返回201 + 自定義響應(yīng)頭)

業(yè)務(wù)需求:新增寵物成功后,返回 201 Created(符合 REST 規(guī)范),并在響應(yīng)頭中添加 Location(指向新增寵物的查詢地址)。
Controller 新增代碼

// 場景2:新增寵物(返回201 + 自定義響應(yīng)頭)
@PostMapping
public ResponseEntity<Pet> addPet(@Valid @RequestBody Pet pet) {
    Pet newPet = petService.addPet(pet);
    // 構(gòu)建響應(yīng):狀態(tài)碼201 + Location響應(yīng)頭 + 新增寵物數(shù)據(jù)
    return ResponseEntity
            .status(201) // 等價于 ResponseEntity.created(URI.create("/pets/" + newPet.getId()))
            .header("Location", "/pets/" + newPet.getId())
            .body(newPet);
}

ApiPost 測試步驟

  • 新建請求,請求方式選擇 POST,URL 填寫 http://localhost:8080/pets;
  • 切換到「Body」標簽,選擇「JSON」格式,輸入請求體:
{
    "name": "小白",
    "breed": "薩摩耶",
    "age": 1
}
  • 點擊「發(fā)送」,查看響應(yīng):
  • 狀態(tài)碼:201 Created;
  • 響應(yīng)頭:包含 Location: /pets/3
  • 響應(yīng)體:
{
    "id": 3,
    "name": "小白",
    "breed": "薩摩耶",
    "age": 1
}

場景3:刪除寵物(成功返回204 無響應(yīng)體)

業(yè)務(wù)需求:刪除寵物成功后,返回 204 No Content(無響應(yīng)體,符合 REST 規(guī)范);刪除失敗則返回 404。
Controller 新增代碼

// 場景3:刪除寵物(成功204,失敗404)
@DeleteMapping("/{id}")
public ResponseEntity<Void> deletePet(@PathVariable Long id) {
    boolean isDeleted = petService.deletePet(id);
    if (isDeleted) {
        // 204 無響應(yīng)體,使用 ResponseEntity.noContent().build()
        return ResponseEntity.noContent().build();
    } else {
        // 404 未找到
        return ResponseEntity.notFound().build();
    }
}

ApiPost 測試步驟

  1. 新建請求,請求方式選擇 DELETE,URL 填寫 http://localhost:8080/pets/3;
  2. 點擊「發(fā)送」,查看響應(yīng):
    • 狀態(tài)碼:204 No Content;
    • 響應(yīng)體:為空(符合規(guī)范);
  3. 測試刪除不存在的寵物(URL 改為 http://localhost:8080/pets/99):
    • 狀態(tài)碼:404 Not Found。

場景4:查詢寵物不存在(返回404 + 錯誤信息)

業(yè)務(wù)需求:查詢不存在的寵物時,返回 404 Not Found + 自定義錯誤提示(而非空響應(yīng))。
改造場景1的查詢接口

// 場景4:改造查詢接口,不存在則返回404 + 錯誤信息
@GetMapping("/{id}")
public ResponseEntity<Object> getPet(@PathVariable Long id) {
    Pet pet = petService.getPetById(id);
    if (pet != null) {
        return ResponseEntity.ok(pet);
    } else {
        // 構(gòu)建自定義錯誤響應(yīng)體,狀態(tài)碼404
        Map<String, String> error = new HashMap<>();
        error.put("code", "PET_NOT_FOUND");
        error.put("message", "寵物ID:" + id + " 不存在");
        return ResponseEntity.status(404).body(error);
    }
}

ApiPost 測試步驟

  • GET 請求 URL 填寫 http://localhost:8080/pets/99;
  • 點擊「發(fā)送」,查看響應(yīng):
    • 狀態(tài)碼:404 Not Found;
    • 響應(yīng)體:
{
    "code": "PET_NOT_FOUND",
    "message": "寵物ID:99 不存在"
}

場景5:參數(shù)校驗失?。ǚ祷?00 + 錯誤信息)

業(yè)務(wù)需求:新增/修改寵物時,參數(shù)不符合規(guī)則(如年齡負數(shù)、名稱為空),返回 400 Bad Request + 詳細錯誤提示。
新增全局異常處理器(統(tǒng)一處理參數(shù)校驗異常)

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.HashMap;
import java.util.Map;
@RestControllerAdvice // 全局異常處理
public class GlobalExceptionHandler {
    // 處理參數(shù)校驗異常
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<Map<String, String>> handleValidationExceptions(MethodArgumentNotValidException ex) {
        Map<String, String> errors = new HashMap<>();
        // 遍歷所有校驗失敗的字段,收集錯誤信息
        ex.getBindingResult().getAllErrors().forEach((error) -> {
            String fieldName = ((FieldError) error).getField();
            String errorMessage = error.getDefaultMessage();
            errors.put(fieldName, errorMessage);
        });
        // 返回400 + 錯誤信息
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errors);
    }
}

ApiPost 測試步驟

  • POST 請求新增寵物,請求體傳入非法參數(shù):
{
    "name": "",
    "breed": "哈士奇",
    "age": -1
}
  • 點擊「發(fā)送」,查看響應(yīng):
  • 狀態(tài)碼:400 Bad Request;
  • 響應(yīng)體:
{
    "name": "寵物名稱不能為空",
    "age": "寵物年齡不能為負數(shù)"
}

前端測試

以下是極簡版的 Axios 請求案例,僅聚焦「前端處理 ResponseEntity 返回內(nèi)容」的核心邏輯,所有結(jié)果直接輸出到瀏覽器控制臺:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Axios 處理 ResponseEntity 示例</title>
    <!-- 引入 Axios -->
    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
</head>
<body>
    <button onclick="sendPetRequest()">發(fā)送新增寵物請求</button>
    <script>
        // 核心:發(fā)送POST請求并處理ResponseEntity返回內(nèi)容
        async function sendPetRequest() {
            try {
                // 1. 構(gòu)造請求參數(shù)(與后端Pet實體匹配)
                const petData = {
                    name: "小白",
                    breed: "薩摩耶",
                    age: 1
                };
                // 2. 發(fā)送POST請求,調(diào)用后端返回ResponseEntity的接口
                const response = await axios.post(
                    'http://localhost:8080/pets', // 后端接口地址
                    petData // 請求體
                );
                // 3. 控制臺打印ResponseEntity的核心返回內(nèi)容(重點?。?
                console.log("===== ResponseEntity 返回內(nèi)容解析 =====");
                console.log("1. HTTP狀態(tài)碼(ResponseEntity.status):", response.status); // 201
                console.log("2. 響應(yīng)頭(ResponseEntity.header設(shè)置的內(nèi)容):", response.headers); // 含Location等
                console.log("3. Location響應(yīng)頭具體值:", response.headers.location); // /pets/3
                console.log("4. 響應(yīng)體(ResponseEntity.body):", response.data); // 新增的Pet對象
                console.log("========================================");
            } catch (error) {
                // 4. 異常場景:解析錯誤的ResponseEntity內(nèi)容
                console.log("===== 錯誤的ResponseEntity返回內(nèi)容 =====");
                if (error.response) {
                    // 后端返回了錯誤的ResponseEntity(如400/404)
                    console.log("錯誤狀態(tài)碼:", error.response.status); // 400/404等
                    console.log("錯誤響應(yīng)體:", error.response.data); // 后端返回的錯誤信息
                } else {
                    console.log("請求異常:", error.message); // 網(wǎng)絡(luò)/配置錯誤
                }
            }
        }
    </script>
</body>
</html>

核心說明(聚焦 ResponseEntity 處理)

  1. response.status:對應(yīng)后端 ResponseEntity.status(201) 設(shè)置的 HTTP 狀態(tài)碼;
  2. response.headers:對應(yīng)后端 ResponseEntity.header("Location", ...) 設(shè)置的響應(yīng)頭;
  3. response.data:對應(yīng)后端 ResponseEntity.body(...) 設(shè)置的響應(yīng)體(Pet 對象/錯誤信息);
  4. 錯誤場景下,error.response.status/error.response.data 可獲取后端返回的錯誤 ResponseEntity 內(nèi)容(如 400 時的參數(shù)錯誤信息)。

測試步驟

  1. 啟動后端 Spring Boot 項目;
  2. 用瀏覽器打開該 HTML 文件,點擊按鈕;
  3. 按 F12 打開控制臺(Console 標簽),即可看到 ResponseEntity 各部分內(nèi)容的解析結(jié)果。

控制臺輸出示例(成功場景)

===== ResponseEntity 返回內(nèi)容解析 =====
1. HTTP狀態(tài)碼(ResponseEntity.status): 201
2. 響應(yīng)頭(ResponseEntity.header設(shè)置的內(nèi)容): {location: '/pets/3', ...}
3. Location響應(yīng)頭具體值: /pets/3
4. 響應(yīng)體(ResponseEntity.body): {id: 3, name: '小白', breed: '薩摩耶', age: 1}
========================================

控制臺輸出示例(錯誤場景,如參數(shù)為空)

===== 錯誤的ResponseEntity返回內(nèi)容 =====
錯誤狀態(tài)碼: 400
錯誤響應(yīng)體: {name: '寵物名稱不能為空', age: '寵物年齡不能為負數(shù)'}

核心總結(jié)

ResponseEntity 的核心價值是「完全掌控 HTTP 響應(yīng)」,記住這幾個關(guān)鍵用法:

  1. 快捷方法ok()(200)、created()(201)、noContent()(204)、notFound()(404)—— 日常開發(fā)優(yōu)先用,代碼更簡潔;
  2. 自定義響應(yīng)status(狀態(tài)碼) + header(鍵, 值) + body(響應(yīng)體) —— 滿足特殊業(yè)務(wù)需求;
  3. 響應(yīng)體靈活:可以是實體類、Map、字符串,甚至 Void(204 場景);
  4. 結(jié)合異常處理:統(tǒng)一返回規(guī)范的錯誤響應(yīng),提升接口友好性。

所有案例都能直接復(fù)制到項目中運行,用 ApiPost 測試時只需注意端口和請求參數(shù),就能快速驗證效果。掌握這些用法后,你的 Spring Boot 接口會更符合 REST 規(guī)范,也能應(yīng)對各種復(fù)雜的響應(yīng)需求。

ResponseEntity 的誕生與演進

ResponseEntity 并非 Spring Boot 專屬特性,而是Spring Framework 中用于標準化 HTTP 響應(yīng)的核心類,其誕生和發(fā)展完全圍繞 Spring 對 RESTful API 支持的演進展開。

1. 首次誕生:Spring Framework 3.0(2009年)

ResponseEntity 最早出現(xiàn)在 Spring Framework 3.0 版本(正式發(fā)布時間:2009年12月17日),是 Spring 為強化 RESTful API 開發(fā)能力而新增的核心類。

誕生背景

  • 2000年 Roy Fielding 提出 REST 架構(gòu)風(fēng)格后,2000年代后期 RESTful API 逐漸成為主流;
  • Spring 2.x 及更早版本對 HTTP 響應(yīng)的控制極為繁瑣(需手動操作 HttpServletResponse 設(shè)置狀態(tài)碼、響應(yīng)頭,或通過 ModelAndView 封裝結(jié)果),無法優(yōu)雅適配 REST 規(guī)范;
  • Spring 3.0 核心目標之一是「原生支持 RESTful 開發(fā)」,因此引入 ResponseEntity,將 HTTP 響應(yīng)的狀態(tài)碼、響應(yīng)頭、響應(yīng)體 封裝為統(tǒng)一對象,讓開發(fā)者無需直接操作底層 Servlet API。

2. 關(guān)鍵演進節(jié)點(與 Spring Boot 關(guān)聯(lián))

Spring Boot 是基于 Spring Framework 的封裝,其對 ResponseEntity 的支持完全依賴底層 Spring 版本:

框架版本關(guān)鍵變化
Spring Framework 3.0首次引入 ResponseEntity,核心能力:封裝狀態(tài)碼、響應(yīng)頭、響應(yīng)體
Spring Framework 4.1新增大量靜態(tài)工廠方法(如 ok()、notFound()、noContent()),簡化使用
Spring Framework 5.x適配響應(yīng)式編程(WebFlux),新增 ResponseEntity<T> 對響應(yīng)式類型的支持
Spring Framework 6.x適配 Jakarta EE 9+(替代 Java EE),包路徑從 javax 遷移到 jakarta,但 ResponseEntity 核心邏輯不變
Spring Boot 3.x基于 Spring Framework 6.x 構(gòu)建,沿用 ResponseEntity 所有特性,無額外修改

3. 核心定位未變

從 2009 年誕生至今,ResponseEntity 的核心設(shè)計目標從未改變:

  • 脫離底層 Servlet API 依賴,以面向?qū)ο蟮姆绞娇刂?HTTP 響應(yīng);
  • 嚴格遵循 HTTP 規(guī)范,支持所有標準狀態(tài)碼(2xx/4xx/5xx)和自定義響應(yīng)頭;
  • 保持靈活性,響應(yīng)體可適配任意類型(實體類、Map、字符串等)。

總結(jié)

  • 「誕生時間」:2009年(Spring Framework 3.0);
  • 「歸屬」:Spring Framework 的 spring-web 模塊(非 Spring Boot 獨創(chuàng));
  • 「Spring Boot 角色」:僅做集成和簡化(如自動配置、無需手動注冊 Bean),未改變 ResponseEntity 的核心實現(xiàn)。

你在 Spring Boot 3 中使用的 ResponseEntity,本質(zhì)是 Spring Framework 6.x 版本的實現(xiàn),相比 2009 年的初代版本,只是增加了更便捷的靜態(tài)方法和對 Jakarta EE 的適配,核心能力和設(shè)計初衷完全一致。

到此這篇關(guān)于Springboot3 ResponseEntity 完全使用案例的文章就介紹到這了,更多相關(guān)Springboot ResponseEntity使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot的pom文件、容器、組件使用及說明

    SpringBoot的pom文件、容器、組件使用及說明

    本文主要介紹了SpringBoot的配置文件、Spring的生命周期、內(nèi)置容器(Tomcat、Jetty、Undertow、Netty)的性能調(diào)優(yōu)和熱加載/熱部署,以及Spring框架中的重要組件
    2025-11-11
  • 詳解servlet的url-pattern匹配規(guī)則

    詳解servlet的url-pattern匹配規(guī)則

    本篇文章主要介紹了=servlet的url-pattern匹配規(guī)則,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • 深入了解java.util.Arrays的使用技巧

    深入了解java.util.Arrays的使用技巧

    在這篇文章中,我們將來帶大家看看?java.util.Arrays?,我們可以使用?Arrays?創(chuàng)建,比較,排序,搜索,stream?和轉(zhuǎn)化數(shù)組,感興趣的小伙伴可以了解一下
    2023-02-02
  • Java的NIO之并發(fā)環(huán)境下非阻塞IO技術(shù)詳解

    Java的NIO之并發(fā)環(huán)境下非阻塞IO技術(shù)詳解

    這篇文章主要介紹了Java的NIO之并發(fā)環(huán)境下非阻塞IO技術(shù)詳解,Java NIO(New IO)是Java平臺提供的一種用于高效處理I/O操作的API,它引入了一組新的類和概念,以提供更好的性能和可擴展性,需要的朋友可以參考下
    2023-09-09
  • Spring Boot 快速集成 Redis的方法

    Spring Boot 快速集成 Redis的方法

    這篇文章主要介紹了Spring Boot 如何快速集成 Redis,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • 在Spring Boot中如何使用Cookies詳析

    在Spring Boot中如何使用Cookies詳析

    這篇文章主要給大家介紹了關(guān)于在Spring Boot中如何使用Cookies的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Java 數(shù)組高頻考點分析講解

    Java 數(shù)組高頻考點分析講解

    數(shù)組對于每一門編程語言來說都是重要的數(shù)據(jù)結(jié)構(gòu)之一,當(dāng)然不同語言對數(shù)組的實現(xiàn)及處理也不盡相同。Java 語言中提供的數(shù)組是用來存儲固定大小的同類型元素
    2022-04-04
  • java不同線程解讀以及線程池的使用方式

    java不同線程解讀以及線程池的使用方式

    這篇文章主要介紹了java不同線程解讀以及線程池的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 詳解Java中如何使用JFreeChart生成甘特圖

    詳解Java中如何使用JFreeChart生成甘特圖

    甘特圖是一種流行的項目管理工具,用于顯示項目的進度和任務(wù)分配,在Java開發(fā)中,JFreeChart是一個強大的開源圖表庫,能夠生成各種類型的圖表,下面我們就來看看如何使用JFreeChart生成甘特圖吧
    2025-01-01
  • 在Trae?IDE中創(chuàng)建Spring?AI項目的實現(xiàn)步驟

    在Trae?IDE中創(chuàng)建Spring?AI項目的實現(xiàn)步驟

    Trae是一個下一代AI代碼編輯器,具有智能代碼生成、自然語言交互、圖像輔助需求表達等功能,本文就來介紹一下Trae?IDE創(chuàng)建Spring?AI項目的實現(xiàn)步驟,感興趣的可以了解一下
    2025-08-08

最新評論

无极县| 南江县| 庆元县| 五家渠市| 湖州市| 定边县| 大悟县| 河源市| 达州市| 繁昌县| 墨竹工卡县| 洪洞县| 麻栗坡县| 宝丰县| 太和县| 内丘县| 遂溪县| 澎湖县| 微山县| 鄂尔多斯市| 板桥市| 林口县| 长沙市| 阿拉善右旗| 呼图壁县| 邵阳县| 长子县| 宣城市| 阳谷县| 浑源县| 上虞市| 灌云县| 金寨县| 闽清县| 高邮市| 扬州市| 扎兰屯市| 建瓯市| 苏州市| 林口县| 博野县|