接上一篇:SpringMVC----Json处理
1. @JsonFormat日期格式化
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date birth;
- 不使用该注解,输出的是日期的毫秒数
public class User {
private int id;
private String username;
private String password;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date birth;
//get set 构造方法
- Controller
@RequestMapping("/json")
@RestController
public class JSONController {
@RequestMapping("/test2")
public User test2(){
User user = new User(1,"liuyuxin","22334",new Date());
return user;
}
- Tomcat运行,访问http://localhost:8080/json/test2
- 上面输出的时间,与当前时间差了8个小时,所以注解@JsonFormat还可以添加的参数timeZone=“GMT+8”,GMT+8表示东8区,中国就是使用这个时区
public class User {
private int id;
private String username;
private String password;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date birth;
// get set 构造方法
2. @JsonIgnore属性忽略
输出结果不再包含被添加@JsonIgnore的属性
public class User {
private int id;
@JsonIgnore
private String username;
// get set 构造方法
- controller不变
3. @JsonInclude属性排除
- 添加@JsonInclude注解的属性,如果是空值就不显示了,不会以null值输出
public class User {
private int id;
@JsonIgnore
private String username;
@JsonInclude(JsonInclude.Include.NON_NULL)
private String password;
// get set 构造方法
- controller
@RequestMapping("/json")
@RestController
public class JSONController {
@RequestMapping("/test2")
public User test2(){
User user = new User(1,"liuyuxin",null,new Date());
return user;
}
- @JsonInclude(JsonInclude.Include.NOT_EMPTY)
- 该注解为NOT_EMPTY,意思是当不为空且值的长度不为0才显示
- User类添加注解
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private String password;
- controller
@RequestMapping("/json")
@RestController
public class JSONController {
@RequestMapping("/test2")
public User test2(){
User user = new User(1,"liuyuxin",new String(),new Date());
return user;
}
- Tomcat运行,结果仍为不显示
4. @JsonProperty属性改名
- 默认key值与属性同名
- 想要他们不同名:在属性上添加注解
@JsonProperty(“id2”)
public class User {
@JsonProperty("名称")
private int id;
// get set 构造方法
- controller
@RequestMapping("/json")
@RestController
public class JSONController {
@RequestMapping("/test2")
public User test2(){
User user = new User(1,"liuyuxin",new String(),new Date());
return user;
}
5. JsonSerialize()自定义序列化
-
下面用一个Double类型的salary属性举例
-
工资默认为10000.126,我们希望在输出时保留2位小数,且四舍五入
-
所以需要一个注解JsonSerialize()
-
参数using, @JsonSerialize(using = 序列化对象)
-
这里需要写一个序列化对象
-
写个MySerializer.java
public class MySerializer extends JsonSerializer<Double> {
//aDouble就是原始值的格式
@Override
public void serialize(Double aDouble, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
//将Double salary的值 四舍五入
//把原始值放到BigDecimal的对象中,setScale(2,)保留2位小数setScale(2,BigDecimal.ROUND_HALF_UP),是一个四舍五入的算法
String number = BigDecimal.valueOf(aDouble).setScale(2,BigDecimal.ROUND_HALF_UP).toString();
//输出 四舍五入的值
jsonGenerator.writeNumber(number);
}
}
- controller不变
- Tomcat运行结果如下:
User类
public class User {
@JsonProperty("名称")
private int id;
@JsonIgnore
private String username;
// @JsonInclude(JsonInclude.Include.NON_NULL)
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private String password;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date birth;
//工资默认为10000.126,我们希望在输出时保留2位小数,且四舍五入
@JsonSerialize(using = MySerializer.class)
private Double salary = 10000.126;
//get set 构造方法