我试图找到一种方法而不是Wrapper类,但我总是得到406 Not Acceptable错误。我在网上搜索并尝试了许多不同的方法,但无法修复它。
@RequestMapping(value = "/users/getlist", headers="Accept=application/xml, application/json", method=RequestMethod.POST)
public @ResponseBody List<Permission> getList(@RequestParam String userEmail) {
List<Permission> permissions = service.getPermissions(userEmail);
return permissions;
}
和
MultiValueMap<String, String> userMap = new LinkedMultiValueMap<String, String>();
userMap.add("userEmail", email_address);
// Prepare acceptable media type
List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
acceptableMediaTypes.add(MediaType.APPLICATION_XML);
// Prepare header
HttpHeaders headers = new HttpHeaders();
headers.setAccept(acceptableMediaTypes);
HttpEntity<?> userEntity = new HttpEntity<Object>(userMap, headers);
List<Permission> permissions = restTemplate.postForObject("http://localhost:8080/users/getlist", userEntity, List.class);
我也试过了;
List<Permission> permissions = (List<Permission>) restTemplate.postForEntity("http://localhost:8080/users/getlist", userEntity, List.class);
所以基本上如果我使用带有getter和setter的包装器类,它就可以了。但我需要创建许多包装类。你有任何想法这样实现吗?
解决方案:
工作时不向http实体添加媒体类型。
答案 0 :(得分:2)
我相信
headers="Accept=application/xml, application/json"
要求您的Accept
标头实际上具有值application/xml, application/json
。你的要求没有。
添加一种可接受的媒体类型。
List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
acceptableMediaTypes.add(MediaType.APPLICATION_XML);
最终会有一个像
这样的请求标题Accept: application/xml
与宣布的@RequestMapping
不匹配。
相反,如果您希望headers
与application/xml
或application/json
匹配,则可以
headers= {"Accept=application/xml", "Accept=application/json"}
或更好
produces = {"application/xml", "application/json"}