Try Everything Different In My Life.

使用Jackson的JsonView返回不同的

2019.08.21

在开发中我们返回的对象是VO(View Object),有的时候,返回的vo对象存在重复的情况。使用Jackson中的Jsonview可以解决这个问题。

情景

有一个user对象,

public class User{

    private String username;
    private String password;
    private int age;

    // 省略get,set方法
}

在不同的接口中我们可能有的时候要返回password,有的时候不需要,不要的时候就要重新写一个没有password字段的vo对象。

使用Jackson

使用jackson可以解觉这样的问题

public class User{

    // 声明视图接口
    public interface UserSimpleView{};
    public interface UserDetailView extends UserSimpleView {};

    private String username;
    private String password;
    private int age;

    public void setUsername(String username){
        this.username = username;
    }

    @JsonView(UserSimpleView.class)
    public String getUsername(){
        return username;
    }

    public void setPassword(String password){
        this.password = password;
    }

    @JsonView(UserDetailView.class)
    public String getPassword(){
        return password;
    }

    public void setAge(int age){
        this.age = age;
    }

    @JsonView(UserSimpleView.class)
    public String getAge(){
        return age;
    }
}

在Controller中指定返回的视图


@GetMapping("/user")
@JsonView(User.UserSimpleView.class)
public DTO getAllUserInfo(){

    return null;
}

@GetMapping("/user/2")
@JsonView(User.UserDetailView.class)
public DTO getUserDetailInfo(){

    return null;
}