SpringMVC中@JsonSerialize通过注解格式化字段样式

jackson-databind-x.x.x.jar

       在后台查询出来的数据后,有时候我们需要对数据的值进行格式化,比如日期,时间,若不加任何说明情况下Date类型将以时间戳的形式转换为Json并返回。

例如:double类型的后台为99.00,通过spring框架的接口,前台取值为99,小数位消失;

       jackson提供了一些自定义格式的方法。我们只需继承它的抽象类JsonSerializer<T> ,并在指定的属性方法上添加注解@JsonSerialize即可实现。

 
  1. /**

  2. * Annotation used for configuring serialization aspects, by attaching

  3. * to "getter" methods or fields, or to value classes.

  4. * When annotating value classes, configuration is used for instances

  5. * of the value class but can be overridden by more specific annotations

  6. * (ones that attach to methods or fields).

  7. *<p>

  8. * An example annotation would be:

  9. *<pre>

  10. * &#64;JsonSerialize(using=MySerializer.class,

  11. * as=MySubClass.class,

  12. * typing=JsonSerialize.Typing.STATIC

  13. * )

  14. *</pre>

  15. * (which would be redundant, since some properties block others:

  16. * specifically, 'using' has precedence over 'as', which has precedence

  17. * over 'typing' setting)

  18. */

  19. @Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD, ElementType.TYPE, ElementType.PARAMETER})

  20. @Retention(RetentionPolicy.RUNTIME)

  21. @com.fasterxml.jackson.annotation.JacksonAnnotation

  22. public @interface JsonSerialize

  23. ..........省略..............

翻译

用于配置序列化方面的注释,通过附加到“getter”方法或字段或值类。 注解值类时,配置用于值类的实例,但可以被更具体的注释(附加到方法或字段的注释)覆盖。

一个注解的例子:JsonSerialize(using=MySerializer.class, as=MySubClass.class,typing=JsonSerialize.Typing.STATIC)

这将是多余的,因为一些属性会阻止其他属性:具体而言,“using”优先于“as”,优先于“typing”设置。

JsonSerialize主要是后台传递给前台时的日期格式。

比如:1、保留两位小数  2、将日期格式化yy-MM-dd  3、时间格式化 yyyy-MM-dd HH:mm:ss

 
  1. /**

  2. * 用户将double类型的数据格式化成小数点后两位的字符串数据:如输出为“900.00”.

  3. * @author Shine

  4. *

  5. */

  6.  
  7. public class CustomDoubleSerialize extends JsonSerializer<Double> {

  8. private DecimalFormat df = new DecimalFormat("#0.00");

  9.  
  10. public CustomDoubleSerialize() {

  11. }

  12.  
  13. public void serialize(Double value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {

  14. jgen.writeString(this.df.format(value));

  15. }

  16. }

 

 
  1.  
  2. /**

  3. * 时间序列化工具,直接将时间类型的转为yyyy-MM-dd类型的数据

  4. * 使用方法:在实体的get方法上直接加@JsonSerialize(using = CustomDateSerialize.class)

  5. * @author Shine

  6. */

  7. public class CustomDateSerialize extends JsonSerializer<Date> {

  8.  
  9. //定义时间格式

  10. private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

  11.  
  12. @Override

  13. public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {

  14. jsonGenerator.writeString(sdf.format(date));

  15. }

  16. }

 
  1. public class JsonTimeStampSerializer extends JsonSerializer<Timestamp> {

  2. private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

  3.  
  4. @Override

  5. public void serialize(final Timestamp timestamp, final JsonGenerator gen, final SerializerProvider provider) throws IOException,

  6. JsonProcessingException {

  7. String value = dateFormat.format(timestamp);

  8. gen.writeString(value);

  9. }

  10. }

在自己的vo中就可以使用这样的注解

 
  1. @Data

  2. public abstract class IBaseBo {

  3. /** 创建时间 */

  4. @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

  5. @JsonSerialize(using = JsonTimeStampSerializer.class)

  6. private Timestamp createTime;

  7. /** 修改人 */

  8. private long modifyUser;

  9. /** 更新时间 */

  10. @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

  11. @JsonSerialize(using = JsonTimeStampSerializer.class)

  12. private Timestamp updateTime;

  13. /** 版本信息 */

  14. private int version;

  15. }

 

 

    @JsonSerialize(using = CustomDoubleSerialize.class)
    private Double salePrice;
    @JsonSerialize(using = CustomDoubleSerialize.class)
    private Double originalPrice;

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值