jackson 枚举/日期 date enum json 解析类型 返回数字 或者自定义文字

jackson 解析枚举 时一般返回 MALE,FEMALE,

如果想返回 文字或者数字怎么办。网上stackflow上大都用@JsonCreator

官网提供的方法(下面的方法)更好点,想返回什么就在属性的get方法上加    @JsonValue。如果想在不同的方法中返回不同的值就用其他的方法了!

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.model;  
  2.   
  3. import com.fasterxml.jackson.annotation.JsonValue;  
  4.   
  5. public enum Gender {  
  6.     MALE(0,"男"),FEMALE(1,"女"),UNKOWN(2,"未知");  
  7.       
  8.     private Integer id;  
  9.     private String name;  
  10.       
  11.     private Gender(Integer id,String name) {  
  12.         this.id = id;  
  13.         this.name = name;  
  14.     }  
  15.     private Gender(Integer id) {  
  16.         this.id = id;  
  17.     }  
  18.       
  19.     private Gender(String name) {  
  20.         this.name = name;  
  21.     }  
  22.       
  23.       
  24.     public String getName() {  
  25.         return name;  
  26.     }  
  27.     public void setName(String name) {  
  28.         this.name = name;  
  29.     }  
  30.     @JsonValue  
  31.     public Integer getId() {  
  32.         return id;  
  33.     }  
  34.     public void setId(Integer id) {  
  35.         this.id = id;  
  36.     }  
  37.       
  38. }  


OR :

在使用该枚举的对象的 get方法上

@JsonSerialize(using = OrderTypeSerializer.class)

public class OrderTypeSerializer extends JsonSerializer<OrderType> {

@Override
public void serialize(OrderType value, JsonGenerator generator,
SerializerProvider provider) throws IOException,
JsonProcessingException {

generator.writeStartObject();
generator.writeFieldName("id");
generator.writeNumber(value.getId());
generator.writeFieldName("name");
generator.writeString(value.getName());
generator.writeEndObject();
}}


同理,解决日期格式也可以这样:

在SPRING MVC3中,比如做REST时,经常要用JASON去解析,遇到了日期格式化的问题,
请看例子:

1) 比如有一个POJO
  package com.loiane.model;

import java.util.Date;

import org.codehaus.jackson.annotate.JsonAutoDetect;

@JsonAutoDetect
@Entity
public class Company {

    private int id;
    private double price;
    private String company;
    private Date date;
    private String size;
    private byte visible;
}

2)在controller中,返回一个MAP
   public @ResponseBody Map<String,List<Company>> view() throws Exception

3) 于是SPIRNG MVC返回如下的JSON字符:
   {"total":27,"data":[{"price":71.72,"company":"3m Co","visible":1,"id":1,"size":"large","date":1188615600000},{"price":29.01,"company":"Aloca
Inc","visible":0,"id":2,"size":"medium","date":1185937200000},{"price":83.81,"company":"Altria Group
Inc","visible":0,"id":3,"size":"large","date":1186110000000
。。。。。。。。。。。。。。。。

4) 可以看到,返回的时间格式不大好看

5)于是,可以这样设置:
   @JsonSerialize(using=JsonDateSerializer.class)
public Date getDate() {
    return date;
}
其中   JsonDateSerializer是新编写的类,继承了JsonSerializer
  import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.SerializerProvider;
import org.springframework.stereotype.Component;
@Component
public class JsonDateSerializer extends JsonSerializer<Date>{

    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy");

    @Override
    public void serialize(Date date, JsonGenerator gen, SerializerProvider provider)
            throws IOException, JsonProcessingException {

        String formattedDate = dateFormat.format(date);

        gen.writeString(formattedDate);
    }

}

   很简单,格式化一下,这下输出JSON就可以了
{"total":27,"data":[{"price":71.72,"company":"3m Co","visible":1,"id":1,"size":"large","date":"09-01-2007"},{"price":29.01,"company":"Aloca
Inc","visible":0,"id":2,"size":"medium","date":"08-01-2007"},{"price":83.81,"company":"Altria Group
Inc","visible":0,"id":3,"size":"large","date":"08-03-2007"},{"price":52.55,"company":"American Express Company","visible":1,"id":4,"size":"extra
large","date":"01-04-2008"},{"price":64.13,"company":"American International Group
Inc.","visible":1,"id":5,"size":"small","date":"03-04-2008"},{"price":31.61,"company":"AT&T Inc.","visible":0,"id":6,"size":"extra
large","date":"02-01-2008"},{"price":75.43,"company":"Boeing Co.","visible":1,"id":7,"size":"large","date":"01-01-2008"},{"price":67.27,"company":"Caterpillar
Inc.","visible":1,"id":8,"size":"medium","date":"12-03-2007"},{"price":49.37,"company":"Citigroup,
Inc.","visible":1,"id":9,"size":"large","date":"11-24-2007"},{"price":40.48,"company":"E.I. du Pont de Nemours and Company","visible":0,"id":10,"size":"extra
large","date":"05-09-2007"}],"success":true}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值