首页 > 解决方案 > 根据请求参数从 REST 控制器返回 XML 或 JSON

问题描述

这是我的控制器:

@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;
}

这是我的请求类:

@Data
@NoArgsConstructor
public class Request {

    @NotNull
    private String name;
    
    private String type = "application/json";
}

控制器根据Accept客户端发送的请求中的标头生成正确的输出。但是,我不想发送任何Accept标题,只发送以下请求:

{
    "name": "my name",
    "type": "application/xml"
}

然后根据type正确的格式输出。我尝试添加HttpServletResponse response到控制器方法的参数列表中,然后像这样设置内容类型:

response.setHeader(CONTENT_TYPE, request.geType());

但它总是返回 json。知道我还应该做什么吗?

标签: javajsonxmlspring-boot

解决方案


我认为标准 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);

推荐阅读