如何在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 对象?