簡體   English   中英

從 REST Z594C103F2C6E04C3D18AB059F031 請求返回 XML 或 JSON

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM