首页 > 解决方案 > 如何在restful控制器的返回对象中设置成员变量

问题描述

一个restful控制器返回的打包类,有三个成员变量:code、msg、data。数据的Statement类是Object。data可以是任何实体类。实体的某些成员不应该出现在返回的Json中。有什么办法可以配置?

我知道@JsonView在一个接口和get方法可以控制成员是否出现。但它控制代码,msg,数据不是数据中的成员。控制器方法返回结果类是这样的

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"
  }
}

标签: javaspring-boot

解决方案


使用 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 访问设置,表示该属性只能被写入(设置)用于反序列化,而不会在序列化时被读取(获取),即该属性的值不包含在序列化中

使用@JsonIgnoreProperties

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

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

@JsonIgnoreProperties当我想扩展某些类并忽略父类的某些属性时,我通常会选择。


推荐阅读