使用注解JSON序列化

@JsonSerialize(using = ToStringSerializer.class)

将返回数据转成String序列化

@JsonFormat(pattern ="yyyy-MM-dd hh:mm",timezone="GMT+8")

将日期数据转换成特定格式

使用@JsonSerialize自定义注解接口

定义接口

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.FIELD, ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface JsonLocalSerializable {

	String localizationKey();

} 

 实现序列化方法

public class BigDecimalSerializer extends StdSerializer<BigDecimal> implements ContextualSerializer {

	private String localizationKey;

	public BigDecimalSerializer(String key) {
		super(BigDecimal.class);
		this.localizationKey = key;
	}

	@Override
	public void serialize(BigDecimal value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
		BigDecimal resVal = value.setScale(Integer.valueOf(localizationKey), BigDecimal.ROUND_HALF_UP);
		jgen.writeString(resVal.toString());
	}

	@Override
	public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) throws JsonMappingException {

		String key = null;
		JsonLocalSerializable ann = null;
		if (property != null) {
			ann = property.getAnnotation(JsonLocalSerializable.class);
		}
		if (ann != null) {
			key = ann.localizationKey();
		}
		if (key== null){
			key = "2";
		}
		return new BigDecimalSerializer(key);
	}
}
使用示例
@JsonSerialize(using = BigDecimalSerializer.class)
@JsonLocalSerializable(localizationKey = "2")
private BigDecimal baseVal;
import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.FIELD, ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotationsInside
@JsonSerialize(using = BigDecimalSerializer.class)
public @interface JsonLocalSerializable {

	String localizationKey();

} 

使用示例 

@JsonLocalSerializable(localizationKey = "0")

使用@JSONField自定义注解

public class LongSerializeConfig {

    public static class Long2StringSerializer implements ObjectSerializer {
        @Override
        public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType,
                          int features) {
            if (!Long.class.equals(fieldType)) {
                log.warn("Field configuration error");
                serializer.write(object);
            }
            serializer.write(object.toString());
        }
    }

    public static class FloatStringSerializer implements ObjectSerializer {
        @Override
        public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType,
                          int features) {
            if (!Float.class.equals(fieldType)) {
                log.warn("Field configuration error");
                serializer.write(object);
            }
            String f = MathUtils.keepTwoDecimalFloat(object);
            serializer.write(f);
        }
    }

    public static class String2LongDeserializer implements ObjectDeserializer {
        @Override
        public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
            if (!Long.class.equals(type)) {
                log.warn("Field configuration error");
                return (T) parser.parse();
            }
            String value = (String) parser.parse();
            return value == null ? null : (T) Long.valueOf(value);
        }

        @Override
        public int getFastMatchToken() {
            return 0;
        }
    }
}
@JSONField(serializeUsing = BigDecimalSerializer.class)

@JSONField是做什么用的

@JSONField是fastjson的一个注解,在fastjson解析一个类为Json对象时,作用到类的每一个属性(field)上。

通过用@JSONField注解一个类的属性,我们可以达到以下目标

    指定field对应的key名称:@JSONField(name = “NaMe”)
    对于时间字段,指定其格式:@JSONField(format = “yyyy-MM-dd HH:mm:ss”)
    不序列化某些字段:@JSONField(serialize = false)
    指定顺序:@JSONField(ordinal = 1)
    当然,以上注解里的属性,可以同时使用:@JSONField(name = “nAmE”, format = “yyyy-MM-dd HH:mm”)

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值