91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用spring ResponseEntity來處理HTTP的返回請求

發布時間:2020-08-03 18:51:21 來源:網絡 閱讀:6612 作者:lifeneedyou 欄目:軟件技術

通常情況下,在前后端分離的大背景下,我們后臺服務返回給前端的通常都是格式化的數據,比如Json,開始的時候,我們用json包生產一個json的字符串,配合http 協議的一些API 來自定義實現

            spring發展到現在,已經都包裝出來了通用的處理類:ResponseEntity ,此類繼承自HttpEntity
 public class ResponseEntity<T> extends HttpEntity<T> {
private final Object status;

/**
 * Create a new {@code ResponseEntity} with the given status code, and no body nor headers.
 * @param status the status code
 */
public ResponseEntity(HttpStatus status) {
    this(null, null, status);
}

/**
 * Create a new {@code ResponseEntity} with the given body and status code, and no headers.
 * @param body the entity body
 * @param status the status code
 */
public ResponseEntity(@Nullable T body, HttpStatus status) {
    this(body, null, status);
}
            并且做了擴展,用來處理http請求過程中的狀態碼 ,header,body 等數據。

ResponseEntity是一種泛型類型。因此,我們可以使用任何類型作為響應主體:

@Controller
public class XXXController{@GetMapping("/hello")
br/>@GetMapping("/hello")
return new ResponseEntity<>("Hello !", HttpStatus.OK);
}

這里字符串"Hello World!"作為字符串返回給REST端。

我們可以設置HTTP標頭:

@GetMapping("/customHeader")
ResponseEntity<String> customHeader() {
HttpHeaders headers = new HttpHeaders();
headers.add("Custom-Header", "foo");

return new ResponseEntity<>(
"Custom header set", headers, HttpStatus.OK);
}

設置自定義標頭:

@GetMapping("/customHeader")
ResponseEntity<String> customHeader() {
return ResponseEntity.ok()
.header("Custom-Header", "foo")
.body("Custom header set")

如果將一個對象放入:

@GetMapping("/hello")
public ResponseEntity<String> hello() {
return new ResponseEntity<>(new User(‘jdon’), HttpStatus.OK);
}

返回是JSON字符串:

[ { ‘name’: 'jdon'}]

下面是返回對象的JSON列表:

public ResponseEntity<List<ProcessDef>> repositoryProcessDefinitionsGet() {
return new ResponseEntity<>(processDefRepo.findAll(), HttpStatus.FOUND);
}

以上是通過ResponseEntity這個對象在代碼中靈活操控響應,但是在一般情況下我們只是想返回一個帶有數據的正常響應,那么只要使用@注解即可

@ResponseBody
在類級別使用@Controller標注情況下, @ResponseBody注解告訴返回的對象將自動序列化為JSON,并通過回控制器的HttpResponse對象。

@Controller
public class XXXController{

@ResponseBody
public User postResponseController(@RequestBody LoginForm loginForm) {
return new User("Thanks For Posting!!!");
}

將返回客戶端JSON字符串:

[ { ‘name’: Thanks For Posting!!!"}]

在@RestController注解了類的情況下,我們就不需要再使用@ResponseBody了,可以直接返回對象,并使用ResponseStatus返回狀態碼!

@ResponseStatus
ResponseStatus雖然只是規定了返回的狀態,但是只需要標注在方法上,簡單,而且狀態碼與返回類型分離,比較清晰。我們將上面返回對象列表的代碼使用ResponseStatus改寫如下,注意類級別@RestController:

@RestController
public class XXXController{

@ResponseStatus(HttpStatus.FOUND)
public User postResponseController() {
return new User("Thanks For Posting!!!");
}

這也會返回客戶端JSON字符串:

[ { ‘name’: Thanks For Posting!!!"}]

這樣的代碼更加專注于業務。

直接操控響應
Spring還允許我們直接訪問javax.servlet.http.HttpServletResponse對象; 我們只需要將它聲明為方法參數:

@GetMapping("/manual")
public void manual(HttpServletResponse response) throws IOException {
response.setHeader("Custom-Header", "foo");
response.setStatus(200);
response.getWriter().println("Hello World!");
}

由于Spring在底層實現之上提供了抽象和附加功能,因此如果以這種方式直接操縱響應,會失去很多Spring提供方便功能。

實例代碼:

import io.swagger.annotations.*;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import javax.validation.constraints.*;

@javax.annotation.Generated(value = "io.swagger.codegen.languages.SpringCodegen", date = "2019-03-09T21:32:18.308+08:00")

@Api(value = "tag", tags={ "tag", }, description = "the tag API")
public interface TagApi {

@ApiOperation(value = "獲取問題概要標簽列表", notes = "get_issue_summary_tags", response = OperateResult.class, tags={ "tag", })
@ApiResponses(value = { 
    @ApiResponse(code = 200, message = "OK", response = OperateResult.class),
    @ApiResponse(code = 500, message = "system error", response = Void.class) })

@RequestMapping(value = "/tag/{issue_summary_key}/tags",
    produces = { "application/json" }, 
    method = RequestMethod.GET)
default ResponseEntity<OperateResult> getIssueSummaryTags(@NotNull @ApiParam(value = "項目key", required = true) @RequestParam(value = "project_key", required = true) String projectKey, @ApiParam(value = "issue_summary_key", required = true) @PathVariable("issue_summary_key") String issueSummaryKey) {
    // do some magic!
    return new ResponseEntity<OperateResult>(HttpStatus.OK);
}

@ApiOperation(value = "獲取問題概要標簽值列表", notes = "get_tag_values", response = OperateResult.class, tags={ "tag", })
@ApiResponses(value = { 
    @ApiResponse(code = 200, message = "OK", response = OperateResult.class),
    @ApiResponse(code = 500, message = "system error", response = Void.class) })

@RequestMapping(value = "/tag/{issue_summary_key}/tag_value/{tag_type}",
    produces = { "application/json" }, 
    method = RequestMethod.GET)
default ResponseEntity<OperateResult> getTagValues(@NotNull @ApiParam(value = "項目key", required = true) @RequestParam(value = "project_key", required = true) String projectKey, @ApiParam(value = "issue_summary_key", required = true) @PathVariable("issue_summary_key") String issueSummaryKey, @ApiParam(value = "標簽類型 app: 應用 device: 設備 server_name:服務名稱 level:級別 logger:日志 os: 系統 user: 用戶 url:URL transaction:事物", required = true) @PathVariable("tag_type") String tagType, @NotNull @Min(1) @ApiParam(value = "當前頁數", required = true, defaultValue = "1") @RequestParam(value = "page_number", required = true, defaultValue = "1") Integer pageNumber, @NotNull @Min(1) @ApiParam(value = "每頁顯示條數", required = true, defaultValue = "10") @RequestParam(value = "page_size", required = true, defaultValue = "10") Integer pageSize) {
    // do some magic!
    return new ResponseEntity<OperateResult>(HttpStatus.OK);
}

}

@Controller
public class TagApiController implements TagApi {

private final static Logger logger = LoggerFactory.getLogger(TagApiController.class);

@Autowired
private TagService tagService;

@Override
public ResponseEntity<OperateResult> getIssueSummaryTags(@NotNull @ApiParam(value = "項目key", required = true) @RequestParam(value = "project_key", required = true) String projectKey, @ApiParam(value = "issue_summary_key", required = true) @PathVariable("issue_summary_key") String issueSummaryKey) {
    OperateResult operateResult = new OperateResult();
    try {
        Preconditions.checkArgument(StringUtils.isNotBlank(projectKey));
        Preconditions.checkArgument(StringUtils.isNotBlank(issueSummaryKey));
        List<TagDetail> tagValueArrayList = tagService.getIssueSummaryTagList(projectKey, issueSummaryKey);
        operateResult = OperateResult.success(tagValueArrayList);
        return new ResponseEntity<OperateResult>(operateResult,HttpStatus.OK);
    } catch (Exception e) {
        logger.error("api getIssueSummaryTags error.{}", e);
        operateResult = OperateResult.exception(OperateCode.SYSTEM_ERROR,e);
        return new ResponseEntity<OperateResult>(operateResult, HttpStatus.INTERNAL_SERVER_ERROR);
    }
}
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

酒泉市| 吉木萨尔县| 江陵县| 满城县| 上蔡县| 册亨县| 博兴县| 教育| 烟台市| 贵溪市| 扶风县| 建阳市| 商都县| 鹤壁市| 西林县| 通道| 南皮县| 永泰县| 富顺县| 兴仁县| 嘉峪关市| 昌图县| 高唐县| 万年县| 古丈县| 婺源县| 土默特右旗| 漳浦县| 静乐县| 综艺| 若尔盖县| 民权县| 上犹县| 皋兰县| 三穗县| 三河市| 公安县| 永仁县| 山阴县| 宜城市| 会理县|