如何设置/配置Jackson注释以在Spring MVC中工作?

时间:2013-07-18 20:52:30

标签: spring-mvc jackson

我在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罐并将其添加到我的项目中(然后允许我导入注释),但是当我这样做时,@ 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"}

4 个答案:

答案 0 :(得分:5)

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

  1. 杰克逊核
  2. 杰克逊数据绑定
  3. 杰克逊 - 注解
  4. 添加了这些依赖项之后,您可以通过将@JsonIgnore注释放在getter上来阻止字段序列化,如下所示:

    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;
        }
    }
    

答案 1 :(得分:1)

将Jackson JAR添加到您的类路径中。如果您使用Maven添加Jackson2作为依赖项,或手动将所需的JAR复制到您的类路径。春天会做其余的事。

答案 2 :(得分:1)

尝试使用@JsonIgnoreProperties而不是@JsonIgnore

答案 3 :(得分:1)

我最终升级到Spring 3.2.2,它与Jackson 2.2库一起修复了问题。所有杰克逊注释现在都正常工作。我认为这意味着3.1.1装置出现了问题,搞砸了杰克逊的东西,但谁知道呢?

感谢所有回复的人。