【问题标题】:406 Not Acceptable for List - REST406 不可接受的列表 - REST
【发布时间】:2014-04-28 20:42:19
【问题描述】:

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

【问题讨论】:

    标签: spring list rest spring-mvc http-status-code-406


    【解决方案1】:

    我相信

    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/xmlapplication/json,您可以这样做

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

    或者更好

    produces = {"application/xml", "application/json"}
    

    【讨论】:

    • 感谢您的回答。我尝试了生产,但仍然收到 406 错误。你还有什么建议吗?
    • @user3058742 你的类路径中有 Jackson 吗?
    • 我有。当它是单个对象时,没有问题。我无法弄清楚收集。
    • @user3058742 您使用的是哪个 Spring 和 Jackson 版本?我要尝试重现。
    • 春季 4.0.1.RELEASE ,杰克逊 1.9.13 - 谢谢!
    猜你喜欢
    • 2016-04-22
    • 2019-03-24
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 2018-07-22
    • 2015-06-21
    • 1970-01-01
    相关资源
    最近更新 更多