2013-07-18 91 views
3

我在Spring MVC 3.1.1中继承了一个项目,我需要使用Jackson将对象序列化为JSON。我有一个对象类,如:如何设置/配置Jackson注释以在Spring MVC中工作?

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"} 
+0

你使用maven或类似的东西,或者你只使用NetBeans的“依赖系统”? –

+0

没有Maven,只是NetBeans。 – asgallant

+0

确保你的类路径中没有Jackson1(codehaus)和Jackson2(fasterxml)。 –

回答

1

我结束升级到Spring 3.2.2,它与Jackson 2.2库一起解决了这个问题。所有杰克逊注释现在都正常工作。我认为这意味着在3.1.1安装中出现了一些错误,使杰克逊的东西搞砸了,但是谁知道?

感谢所有回复的人。

1

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

+0

我将杰克逊2.2 JAR添加到项目中,该项目解决了导入杰克逊批注的问题,但注释仍然无法正常工作。 – asgallant

1

尝试使用@JsonIgnoreProperties代替@JsonIgnore

+0

我试过了,它不起作用。没有任何注释似乎对输出有任何影响。 – asgallant

5

你对你的classpath中缺少杰克逊的依赖关系。您需要在以下jar添加依赖关系:

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

一旦你拥有了这些依赖也会添加可以防止域被序列化通过将@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; 
    } 
} 
+0

理想情况下,是的,这应该工作。我的问题是它不工作。 – asgallant

+0

@asgallant - 根据您的问题编辑更新我的答案。你仍然缺少jar依赖关系。在我的答案中查看上面的列表。 – gregwhitaker

相关问题