【问题标题】:Jackson version incompatibility?杰克逊版本不兼容?
【发布时间】:2013-02-19 11:14:08
【问题描述】:

我正在使用 Spring 学习 REST。我将 Maven 用于项目依赖项。

我正在使用 Spring 3.2.1 和 Jackson 拨打 GETPOST 电话。当我使用 Jackson 的 1.5.6 版时,GET 工作得很好,我可以看到我的对象的 Json 版本从 GET 调用返回。但是,当我升级到更新的 Jackson 版本时,它不再起作用,并且我在响应中返回以下内容......

此请求标识的资源只能生成具有根据请求“接受”标头()不可接受的特征的响应。

查看有关 StackOverflow 的其他问题,Jackson Mapper 和 Core 版本似乎存在问题,但我在我的项目中找不到其他对 Jackson 的引用,所以我认为这不是问题所在。

App 上下文包含以下内容...

    <mvc:annotation-driven/>

<context:component-scan base-package="im.poz.springrestserver" />

而控制器中被调用的方法如下...

    @RequestMapping(value = "/clients/{clientid}", method= RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE})
@ResponseBody

public Client getClient(@PathVariable("clientid") int clientId) throws llegalArgumentException {
    Client client=services.retrieveClientById(clientId);
    return client;
}

@RequestMapping(value = "/clients", method= RequestMethod.POST, produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE})
@ResponseBody
public Client updateClient(@RequestBody Client client) throws IllegalArgumentException {

    client=services.updateClient(client);
    return client;

}

【问题讨论】:

  • 你能包含一些代码吗?您是否为核心和映射器使用相同的发布版本?
  • 是的,相同的版本。 Maven 似乎可以很好地处理这个问题,我已经检查过了。
  • 您没有包含有问题的 POST 请求。但是,您的服务方法似乎接受多种媒体类型。在发送请求之前,您是否在客户端选择了其中一种媒体类型?
  • 对不起,我有两个问题,但对于这个问题,我关注的是当我更改 Jackson 版本时 GET 停止工作。在客户端,我在标题中设置了“接受应用程序/json”,这适用于 Jackson 1.5.6。 POST 的另一个问题可能是我缺乏使用 Spring/REST/Jackson 的经验,所以在发布问题之前我需要进行更多研究。

标签: java spring rest jackson


【解决方案1】:

答案在构建中。

我正在使用 IntelliJ Idea 11.1,并且对新构建的 Maven POM 的更改似乎没有反映在部署的映像中,因此更改 Jackson 版本意味着 Jackson 实际上完全从部署的构建中丢失。

我需要修改工件并重新部署。

问题解决了。

【讨论】:

  • 所以你可以使用 Jackson 2 并让它工作??无论我包含什么不同的杰克逊库,我都会继续收到这个 406 错误。从技术上讲,jackson-core 应该取代那些旧的 mapper-asl 依赖项。即将放弃 Spring REST 并使用 Resteasy 或 Jersey。所有版本 2.2.3。你能告诉我你正在使用什么库吗?
猜你喜欢
  • 2018-09-14
  • 1970-01-01
  • 2022-12-08
  • 1970-01-01
  • 2013-12-12
  • 2011-08-25
  • 2020-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多