java - 根据请求参数从 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。知道我还应该做什么吗?
解决方案
我认为标准 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);
推荐阅读
- javascript - 将 array.from() 与本地存储中的元素一起使用 (Angular)
- javascript - 如何阻止我的阵列重置(Discord.js)
- c++ - GDB 步骤 (in) 不适用于 std::string
- python-3.x - 检查值列表是否在另一个嵌套列表python中并返回匹配
- postgresql - 从选择语句插入时如何使用postgres Insert ....ON CONFLICT DO UPDATE
- python - 从数组中减去行的平均值
- python - 细胞的条件存在
- markdown - 在 Next.js 中使用 PrismJS 并在 markdown 中突出显示代码
- python - 用于 Postgres 的 Python 中 jsonb 数组的正确格式是什么?
- javascript - 如何声明一个函数,该函数将接受一个带参数的函数,而其参数中没有参数?