JsonIgnoreProperties不起作用

时间:2014-01-08 04:22:04

标签: jackson

我有以下简单类:

import org.codehaus.jackson.annotate.JsonIgnoreProperties;
@JsonIgnoreProperties({ "thirdField" })
public class Message {

    private TypeA type;
    private String producer;

//Getters and Setters

}

在我的测试课程中

import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Test {
   public void testMethd() {
   ObjectMapper objectMapper = new ObjectMapper();
   objectMapper.configure(MapperFeature.USE_ANNOTATIONS, true);
   Class<T> instanceType = Message.class;

   String msgBody = "{\"producer\": \"clientApp\", \"type\": \"aType\", \"thirdField\": []}";
   objectMapper.readValue(msgBody, instanceType);
   }
}

我要做的就是将上面的json字符串转换为Message类并忽略'thirdField'。但我一直在

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "thirdField" (class Message), not marked as ignorable (2 known properties: , "type", "producer"])

4 个答案:

答案 0 :(得分:40)

你混合了不同版本的杰克逊。 请注意,您从JsonIgnoreProperties(版本1.x)导入org.codehaus.jackson.annotate 当您使用ObjectMapper(版本2.x)中的com.fasterxml.jackson.databind时。

答案 1 :(得分:5)

尝试使用上一个Jackson版本(2.4):

import com.fasterxml.jackson.annotation.JsonIgnoreProperties
@JsonIgnoreProperties({"id"})

在这里,您可以找到使用2.4版实现的示例: http://www.ibm.com/developerworks/java/library/j-hangman-app/index.html

答案 2 :(得分:0)

它对我没有任何上述答案,我找到了一个解决方法,我重新初始化了对象和值(复制了对象)。

答案 3 :(得分:0)

我找到了解决方案。 尝试添加

@JsonSerialize(include= JsonSerialize.Inclusion.NON_EMPTY)

关于您的课程

@JsonSerialize(include= JsonSerialize.Inclusion.NON_EMPTY)
class ResponseModel {
 //your properties here
 @JsonIgnoreProperties("messageList","contactList","sender")
    var contactList= ArrayList<ContactModel>()
}

那将解决您的问题伙伴。