【问题标题】:How do I setup/configure Jackson annotations to work in Spring MVC?如何设置/配置 Jackson 注释以在 Spring MVC 中工作?
【发布时间】:2013-07-18 00:08:30
【问题描述】:

我在 Spring MVC 3.1.1 中继承了一个项目,我需要使用 Jackson 将对象序列化为 JSON。我有一个像这样的对象类:

public class User {
    Integer id;
    String name;

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

还有这样的控制器:

@Controller
@RequestMapping(value =  "/home")
public class homeController {
    @RequestMapping(value = "/")
    public @ResponseBody User home() {
        User user;
        user = new User();

        user.setId(1);
        user.setName("Drew");

        return user;
    }
}

导航到 /home 我得到:

{"id":1,"name":"Drew"}

太好了,这是第一步。现在,如果我想忽略“id”参数,Jackson 文档说我应该使用 @JsonIgnore 注释。我遇到的问题是 NetBeans 找不到要为 Jackson 导入的任何注释包,因此我无法使用这些注释。我尝试下载 Jackson 2.2 jar 并将它们添加到我的项目中(然后允许我导入注释),但是当我这样做时 @JsonIgnore 注释不起作用。

我怀疑我缺少 Spring MVC 中的一个 jar 文件,或者我需要在项目的 XML 文件中配置某些内容,我将如何确定是否是这种情况(或两者都不是)?我对 Java 比较陌生,而且我以前从未使用过 Spring,所以如果有一些我不知道您需要的其他信息会有所帮助,请询问,我会尽力找到它。提前感谢您提供的任何帮助!

编辑:

为了澄清,我尝试过使用这样的注释:

public class User {
    Integer id;
    String name;

    @JsonIgnore
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    @JsonProperty("userName")
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

像这样:

@JsonIgnoreProperties({"id"})
public class User {
    Integer id;
    String name;

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    @JsonProperty("userName")
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

而且返回的 JSON 总是一样的:

{"id":1,"name":"Drew"}

【问题讨论】:

  • 你使用 maven 或类似的东西,还是只使用 NetBeans “依赖系统”?
  • 没有 Maven,只有 NetBeans。
  • 确保你的类路径中没有 Jackson1 (codehaus) 和 Jackson2 (fasterxml)。

标签: spring-mvc jackson


【解决方案1】:

我最终升级到 Spring 3.2.2,它与 Jackson 2.2 库一起解决了这个问题。所有 Jackson 注释现在都可以正常工作。我认为这意味着 3.1.1 安装有问题,导致 Jackson 的东西搞砸了,但谁知道呢?

感谢所有回复的人。

【讨论】:

    【解决方案2】:

    您的类路径中缺少 Jackson 依赖项。您需要在以下 jars 上添加依赖项:

    1. 杰克逊核心
    2. 杰克逊数据绑定
    3. 杰克逊注解

    添加这些依赖项后,您可以通过在 getter 上放置 @JsonIgnore 注释来防止字段被序列化,如下所示:

    public class User {
        Integer id;
        String name;
    
        @JsonIgnore
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    

    【讨论】:

    • 理想情况下,是的,应该可以。我的问题是它不起作用。
    • @asgallant - 根据您的问题编辑更新了我的答案。您仍然缺少 jar 依赖项。在我的回答中查看上面的列表。
    【解决方案3】:

    尝试使用@JsonIgnoreProperties 而不是@JsonIgnore

    【讨论】:

    • 我试过了,还是不行。没有任何注释似乎对输出有任何影响。
    【解决方案4】:

    将 Jackson JAR 添加到您的类路径中。如果您使用 Maven 添加 Jackson2 作为依赖项,或者手动将所需的 JAR 复制到您的类路径。 Spring 将完成剩下的工作。

    【讨论】:

    • 我将 Jackson 2.2 JAR 添加到项目中,这解决了能够导入 Jackson 注释的问题,但是当我这样做时,注释仍然不起作用。
    猜你喜欢
    • 1970-01-01
    • 2012-03-23
    • 2012-10-17
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    相关资源
    最近更新 更多