相同@JsonIgnore
同时应用于String和List。它正在使用String而不是List。
杰克逊版本2.3.0。下面是打印输出setter属性的示例程序。仍然为testList属性显示了Setter属性。
解决方法可能是mapper.disable(MapperFeature.USE_GETTERS_AS_SETTERS);
,但这不是我想要的行为。我想控制对象本身。
package my.com.myriadeas.ilmu.bootstrap;
import java.util.Iterator;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.BeanDescription;
import com.fasterxml.jackson.databind.DeserializationConfig;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.deser.BeanDeserializerBuilder;
import com.fasterxml.jackson.databind.deser.BeanDeserializerModifier;
import com.fasterxml.jackson.databind.deser.SettableBeanProperty;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.type.TypeFactory;
public class JsonFactoryTest {
/**
* @param args
* @throws JsonMappingException
*/
public static void main(String[] args) throws JsonMappingException {
ObjectMapper mapper = new ObjectMapper();
//mapper.disable(MapperFeature.USE_GETTERS_AS_SETTERS);
mapper.registerModule(new TestJacksonModule());
JavaType javaType = TypeFactory.defaultInstance().uncheckedSimpleType(
TestJsonProperty.class);
System.out.println(mapper.canDeserialize(javaType));
}
public static class TestJsonProperty {
@JsonIgnore
private String testString;
@JsonProperty
public String getTestString() {
return testString;
}
@JsonIgnore
public void setTestString(String testString) {
this.testString = testString;
}
@JsonIgnore
private List<String> testList;
@JsonProperty
public List<String> getTestList() {
return testList;
}
@JsonIgnore
public void setTestList(List<String> testList) {
this.testList = testList;
}
}
public static class TestJacksonModule extends SimpleModule {
/**
*
*/
private static final long serialVersionUID = -8628204972239032380L;
public TestJacksonModule() {
setDeserializerModifier(new AssociationUriResolvingDeserializerModifier());
}
}
private static class AssociationUriResolvingDeserializerModifier extends
BeanDeserializerModifier {
public AssociationUriResolvingDeserializerModifier() {
}
@Override
public BeanDeserializerBuilder updateBuilder(
DeserializationConfig config, BeanDescription beanDesc,
BeanDeserializerBuilder builder) {
Iterator<SettableBeanProperty> properties = builder.getProperties();
while (properties.hasNext()) {
System.out.println("deserialize property= " + properties.next());
}
return builder;
}
}
}