[英]Spring rest controller @ExceptionHandler return xml content and json errors
[英]Return XML or JSON from a REST controller based on request parameters
這是我的 controller:
@PostMapping(value = "/endpoint", produces = { APPLICATION_JSON_VALUE, APPLICATION_XML_VALUE})
@ResponseBody
public Result generateResult(@Valid @RequestBody Request request) throws JsonProcessingException {
Result result = new Result();
// some code here
return result;
}
這是我的請求 class:
@Data
@NoArgsConstructor
public class Request {
@NotNull
private String name;
private String type = "application/json";
}
controller 根據客戶端發送的請求中的Accept
header 生成正確的 output。 但是,我不想發送Accept
header 並且只發送以下請求:
{
"name": "my name",
"type": "application/xml"
}
然后根據type
,正確的格式應該是 output。 我嘗試將HttpServletResponse response
添加到 controller 方法的參數列表中,然后像這樣設置內容類型:
response.setHeader(CONTENT_TYPE, request.geType());
但它總是返回 json。 知道我還應該做什么嗎?
我認為標准 Spring 的 ResponseEntity 構建器為您提供了所有需要的多樣性:
return ResponseEntity
.ok(//any object for json structure)
.headers(//any header)
.build();
相反.ok() 您可以使用任何其他方法(即 http 狀態代碼)
或者
HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.set("MyHeader", "MyValue"); return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.OK);
根據評論,我發布了這個對我有用的答案。 我改變了我的 controller 方法,如下所示:
@PostMapping(value = "/endpoint", produces = { APPLICATION_JSON_VALUE,
APPLICATION_XML_VALUE})
@ResponseBody
public ResponseEntity<Result> generateResult(@Valid @RequestBody Request request)
throws JsonProcessingException {
Result result = new Result();
// some code here
return ResponseEntity.accepted()
.headers(headers)
.body(result);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.