Jackson自定义序列化器(针对null,针对指定name的属性)

public class JsonObjectMapper extends ObjectMapper {

	/**
	 *
	 */
	private static final long serialVersionUID = 8034942567620323925L;

	public JsonObjectMapper() {
		super();
		this.setSerializerFactory(this.getSerializerFactory().withSerializerModifier(new MyBeanSerializerModifier()));
	}

	public class MyBeanSerializerModifier extends BeanSerializerModifier {

		@Override
		public List<BeanPropertyWriter> changeProperties(SerializationConfig config, BeanDescription beanDesc, List<BeanPropertyWriter> beanProperties) {
			//循环所有的beanPropertyWriter
			for (BeanPropertyWriter beanProperty : beanProperties) {

				//status字段转为负数
				if(beanProperty.getName().equals("status")){
					beanProperty.assignSerializer(new JsonSerializer<Object>() {
						@Override
						public void serialize(Object value, JsonGenerator jg, SerializerProvider sp) throws IOException, JsonProcessingException {
							int val = (int)value;
							jg.writeNumber(0 - val);
						}
					});
				}

				BeanPropertyWriter writer = (BeanPropertyWriter) beanProperty;
				Class<?> clazz = writer.getType().getRawClass();
				//字符串
				if (String.class.equals(clazz)) {
					writer.assignNullSerializer(new JsonSerializer<Object>() {
						@Override
						public void serialize(Object value, JsonGenerator jg, SerializerProvider sp) throws IOException, JsonProcessingException {
							jg.writeString("");
						}
					});
				}
				//list
				else if(List.class.isAssignableFrom(clazz)){
					writer.assignNullSerializer(new JsonSerializer<Object>() {
						@Override
						public void serialize(Object value, JsonGenerator jg, SerializerProvider sp) throws IOException, JsonProcessingException {
							jg.writeObject(Collections.EMPTY_LIST);
						}
					});
				}
				//map
				else if (Map.class.isAssignableFrom(clazz)) {
					writer.assignNullSerializer(new JsonSerializer<Object>() {
						@Override
						public void serialize(Object value, JsonGenerator jg, SerializerProvider sp) throws IOException, JsonProcessingException {
							jg.writeObject(Collections.EMPTY_MAP);
						}
					});
				}
				//String[]
				else if (String[].class.isAssignableFrom(clazz)) {
					writer.assignNullSerializer(new JsonSerializer<Object>() {
						@Override
						public void serialize(Object value, JsonGenerator jg, SerializerProvider sp) throws IOException, JsonProcessingException {
							jg.writeObject(new String[0]);
						}
					});
				}
				//其它
				else {
					writer.assignNullSerializer(new JsonSerializer<Object>() {
						@Override
						public void serialize(Object value, JsonGenerator jg, SerializerProvider sp) throws IOException, JsonProcessingException {
							jg.writeString("");
						}
					});
				}
			}
			return beanProperties;
		}
	}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值