@JsonView、@JsonFormat与DateTimeFormat注解的使用
@JsonView、@JsonFormat与@DateTimeFormat注解的使用
Jackson 序列化工具maven依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.7.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.8</version>
</dependency>
@JsonView使用场景
在某一些请求返回的JSON中,我们并不希望返回pojo中的某些字段或全部字段。而在另一些请求中需要返回某些字段。
@JsonView的使用步骤
- 1.使用接口来声明多个视图
- 2.在值对象的get方法上指定视图
- 3.在Controller的方法上指定视图
完整事例代码
User对象定义
public class User{
/**
* 用户简单视图
*/
public interface UserSimpleView{};
/**
* 用户详情视图
*/
public interface UserDetailView extends UserSimpleView{};
private String username;
private String password;
private String age;
@JsonView(UserSimpleView.class)
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@JsonView(UserDetailView.class)
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@JsonView(UserSimpleView.class)
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
这里完成了步骤1和步骤2
定义了步骤1的两个视图接口UserSimpleView和UserDetailView,UserDetailView继承UserSimpleView,UserDetailView拥有视图UserSimpleView的属性
完成了步骤2的在相应的get方法上声明JsonView
定义UserController
@RestController
public class UserController {
@GetMapping("/user")
@JsonView({User.UserSimpleView.class})
public List<User> query(UserQueryCondition userQueryCondition, @PageableDefault(size = 10,page=1,sort = {"username","age"},direction = Sort.Direction.DESC) Pageable pageable){
System.out.println(userQueryCondition);
System.out.print(pageable.getPageSize());
System.out.println(pageable.getSort());
System.out.println(pageable.getOffset());
List<User> users = new ArrayList<>();
users.add(new User());
users.add(new User());
users.add(new User());
return users;
}
/**
* 在url中使用正则表达式
* @param id
* @return
*/
@GetMapping("/user/{id:\\d+}")
@JsonView(User.UserDetailView.class)
public User get(@PathVariable String id){
System.out.println(id);
User user = new User();
user.setUsername("tom");
return user;
}
}
@JsonFormat与@DateTimeFormat注解的使用
背景:从数据库获取时间传到前端进行展示的时候,我们有时候可能无法得到一个满意的时间格式的时间日期,在数据库中显示的是正确的时间格式,获取出来却变成了很丑的时间戳,@JsonFormat注解很好的解决了这个问题,我们通过使用@JsonFormat可以很好的解决:后台到前台时间格式保持一致的问题,其次,另一个问题是,我们在使用WEB服务的时,可能会需要用到,传入时间给后台,比如注册新用户需要填入出生日期等,这个时候前台传递给后台的时间格式同样是不一致的,而我们的与之对应的便有了另一个注解,@DataTimeFormat便很好的解决了这个问题,接下来记录一下具体的@JsonFormat与DateTimeFormat的使用过程。
在你需要查询出来的时间的数据库字段对应的实体类的属性上添加@JsonFormat
public class TestClass {
//设置时区为上海时区,时间格式自己据需求定。
@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
private Date testTime;
}
这里解释一下:@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
pattern:是你需要转换的时间日期的格式
timezone:是时间设置为东八区,避免时间在转换中有误差
提示:@JsonFormat注解可以在属性的上方,同样可以在属性对应的get方法上,两种方式没有区别
注解@DateTimeFormat
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date symstarttime;
可同时使用

浙公网安备 33010602011771号