1

我试图找到一种方法而不是 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 实体添加任何媒体类型。

4

1 回答 1

2

我相信

headers="Accept=application/xml, application/json"

将要求您的Accept标题实际上具有 value application/xml, application/json。你的要求没有。

您添加一个可接受的媒体类型。

List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
acceptableMediaTypes.add(MediaType.APPLICATION_XML);

这将最终得到一个请求标头,例如

Accept: application/xml

这与@RequestMapping声明的不匹配。

相反,如果你想headers匹配application/xmlor application/json,你可以做

headers= {"Accept=application/xml", "Accept=application/json"}

或者更好

produces = {"application/xml", "application/json"}
于 2014-04-28T22:25:46.090 回答