如何在restful控制器的返回对象中设置成员变量[重复]

Posted

技术标签:

【中文标题】如何在restful控制器的返回对象中设置成员变量[重复]【英文标题】:how to set member variable in return object of restful controller [duplicate] 【发布时间】:2019-10-06 02:52:44 【问题描述】:

一个restful控制器返回的打包类,有3个成员变量:code、msg、data。数据的Statement类是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"
  

【问题讨论】:

你在用杰克逊吗? 在 getter 上使用 @JsonIgnore 【参考方案1】:

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

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

这样它就永远不会成为响应的一部分。

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

【讨论】:

【参考方案2】:

使用 Spring Boot 的默认序列化(使用 Jackson),有以下三种方式:

使用@JsonIgnore

您可以尝试仅在您的 getter 上添加 @JsonIgnore

    @JsonIgnore
    private String password;

或者:

    @JsonIgnore
    public String getPassword() 
        return password;
    

使用@JsonProperty 访问

你可以在你的字段上添加@JsonProperty注解:

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

只写 访问设置,表示该属性只能在反序列化时被写入(设置),而在序列化时不会被读取(获取),即属性的值不包含在序列化中

使用@JsonIgnoreProperties

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

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

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

【讨论】:

似乎不能像@jsonview那样使用,我可以设置一些配置以适应不同的情况 那么可能this可以帮助你

以上是关于如何在restful控制器的返回对象中设置成员变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何测试在视图控制器单元测试中设置私有变量的方法?

如何使用 swig node js 在变量中设置 JSON 对象?

如何在路径中设置变量并在模板中显示?

Javascript:如何在回调中设置父对象变量

在 API Gateway 中设置阶段 » 为 REST API 部署设置阶段变量Stage variables

没有成员函数的类实例的默认返回