弹簧启动控制器内容协商
我有一个简单的REST控制器,写在Spring-boot应用程序中,但我不知道如何实现内容协商,使其基于请求标头中的内容类型参数返回JSON或XML。有人可以向我解释一下,我做错了什么吗?
控制器方法:
@RequestMapping(value = "/message", method = RequestMethod.GET, produces = { MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE })
public Message getMessageXML(@RequestParam("text") String text) throws Exception {
Message message = new Message();
message.setDate(new Date());
message.setName("Test");
message.setAge(99);
message.setMessage(text);
return message;
}
调用此方法时,我总是得到JSON(即使我指定了 to be or )。Content-Type
application/xml
text/xml
当我实现两个具有不同映射和不同内容类型的方法时,我能够从xml中获取XML,但是如果我在单个方法中指定两个mediaTypes(如提供的示例),则它不起作用。
我想要的是调用端点并接收\message
- 当 GET 请求的内容类型设置为 application/xml 时的 XML
- 当内容类型为 application/json 时的 JSON
任何帮助是值得赞赏的。
编辑:我更新了我的控制器以接受所有媒体类型
@RequestMapping(value = "/message", method = RequestMethod.GET, produces = { MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE }, consumes = MediaType.ALL_VALUE)
public Message getMessageXML(@RequestParam("text") String text) throws Exception {
Message message = new Message();
message.setDate(new Date());
message.setName("Vladimir");
message.setAge(35);
message.setMessage(text);
return message;
}