2013-12-16 2 views

ответ

0

Вы можете сделать это, используя фильтр - это немного подробный, но он выполняет эту работу. Во-первых - нужно указать фильтр на вашей организации:

@JsonFilter("myFilter") 
public class MyDtoWithFilter { ...} 

Затем вам необходимо указать свой собственный фильтр, который будет смотреть на значения:

PropertyFilter theFilter = new SimpleBeanPropertyFilter() { 
    @Override 
    public void serializeAsField(Object pojo, JsonGenerator jgen, SerializerProvider provider, PropertyWriter writer) throws Exception { 
    if (include(writer)) { 
     if (writer.getName().equals("intValue")) { 
     int intValue = ((MyDtoWithFilter) pojo).getIntValue(); 
     if (intValue < 0) { 
      writer.serializeAsField(pojo, jgen, provider); 
     } 
     } else { 
     writer.serializeAsField(pojo, jgen, provider); 
     } 
    } else if (!jgen.canOmitFields()) { // since 2.3 
     writer.serializeAsOmittedField(pojo, jgen, provider); 
    } 
    } 

    @Override 
    protected boolean include(BeanPropertyWriter writer) { 
    return true; 
    } 
    @Override 
    protected boolean include(PropertyWriter writer) { 
    return true; 
    } 
}; 

Это делается для поля intValue, но вы можете сделать то же самое для всех своих полей, которые должны быть положительными аналогичным образом.

Наконец, вы не может маршал объект и тест, что он работает:

FilterProvider filters = new SimpleFilterProvider().addFilter("myFilter", theFilter); 
MyDtoWithFilter dtoObject = new MyDtoWithFilter(); 
dtoObject.setIntValue(12); 

ObjectMapper mapper = new ObjectMapper(); 
String dtoAsString = mapper.writer(filters).writeValueAsString(dtoObject); 

Надеется, что это помогает.

Смежные вопросы