如何在静态控制器的返回对象中设置成员变量

时间:2019-05-19 14:57:00

标签: java spring-boot

用于宁静控制器返回的包装类,具有三个成员变量:代码,消息,数据。数据的声明类为Object.data可以是任何实体类。实体的某些成员不应出现在返回Json中。一些配置方式?

我已经知道@JsonView在接口上,并且get方法可以控制成员是否出现,但是它控制代码,msg,数据而不是data中的成员.Controller方法返回这样的Result类

public class Result{
  private String code;
  private String msg;
  private User user;
}


public class User {
 private String userName;
 private String password;
}

我希望结果Json没有这样的密码

{
  "code":1,
  "msg":"",
  "data":{
    "userName":"Ted"
   }
}

不喜欢

{
  "code":1,
  "msg":"",
  "data":{
    "userName":"Ted",
    "password":"Tedisbear"
  }
}

2 个答案:

答案 0 :(得分:0)

一种方法是将@JsonIgnore批注添加到password字段

public class User {
    private String userName;
    @JsonIgnore
    private String password;
}

那样,它将永远不会成为响应的一部分。

您还可以注释getPassword()方法并获得相同的结果。

答案 1 :(得分:0)

使用Spring Boot的默认序列化(使用Jackson),可以通过以下三种方式进行:

使用@JsonIgnore

您可以尝试仅在您的吸气剂上添加@JsonIgnore

    @JsonIgnore
    private String password;

或者:

    @JsonIgnore
    public String getPassword() {
        return password;
    }

使用@JsonProperty访问权限

您可以在字段中添加@JsonProperty批注:

@JsonProperty(access = Access.WRITE_ONLY)
private String password;
  

WRITE_ONLY   访问设置,意味着该属性只能被写入(设置)以进行反序列化,而在序列化时将不会被读取(获取),即,属性的值不包含在序列化中。< / p>

使用@JsonIgnoreProperties

在类中添加要忽略的属性:

@JsonIgnoreProperties({"password"})
public class User {
    private String userName;
    private String password;
}

当我想扩展某些类并忽略父级的某些属性时,我通常会使用@JsonIgnoreProperties