@JsonView注解如何优雅的忽略字段返回

2020-11-25 14:22:57 浏览数 (1)

哈喽,好久不更新今天跑来更新了,这段时间换了新公司,有点小忙,废话就不多说了,我们直接开始正题吧。

不知道大家有没有这样一个感觉,有些东西很简单,确实也非常简单,但是当要去写的时候总想不起来,多多少少有点瑕疵,要不少个括号,要不位置不对,反正我在写SQL语句的时候是深有体会,所以虽然这个注解很简单,但是我还是写下来记录一下,另外跟大家分享一下,方便以后查阅。

Avengers

之前我在写接口的时候,经常返回一些前台不需要的一些字段,举个例子,像用户表,一般由用户名、密码、电话、注册时间等信息,但是我们一般在前台展示的时候是不需要将注册时间展示给用户的,有的朋友可能说了,直接使用@JsonIgnore注解就可以忽略该字段,确实给属性字段加了该注解确实可以让它不返回给前台,但是还有这样一个需求,我们一般都有一个后台管理系统需要管理所有的用户,我们需要查看这个用户是什么时候注册的,那么这个时候有需要显示,那么你怎么办呢?所有@JsonView就可以很好的帮我们处理这种需求了。

先来看一段代码

代码语言:javascript复制
public class User {

    public interface UserSimpleView {};

    public interface UserDetailView extends UserSimpleView {};

    @JsonView(UserSimpleView.class)
    private Long id;

    @JsonView(UserSimpleView.class)
    private String username;

    private String passwrod;

    @JsonView(UserDetailView.class)
    private Date registeredTime;
}

我们在上方分别定义了两个接口,使用@JsonView注解,我们将前台需要展示的字段指向UserSimpleView接口,我们这里需要注意,因为前台所需的数据后台也是需要展示的,所以这里我们直接通过UserDetailView继承UserSimpleView即可,最后我们将注册时间指向UserDetailView,这样我们的model类就算写好了,但是还没有结束。

看最后一段代码

代码语言:javascript复制
@RestController
public class UserController {

    @GetMapping("/user")
    @JsonView(User.UserSimpleView.class)
    public R getUser() {

   User user = new User();

   user.setId(1L);
   user.setUsername("一个程序员的成长");
   user.setPasswrod("123");
   user.setRegisteredTime(new Date());

    return R.data(user);
 }
}

我们需要在Controller方法上面也加@JsonView注解,需要注明我们返回哪些字段,它里面装的就是我们刚才配置的那些字段,最后我们来看一看结果。

@JsonView(User.UserSimpleView.class)

@JsonView(User.UserDetailsView.class)

0 人点赞