java - 如何在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"
}
}
解决方案
使用 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
当我想扩展某些类并忽略父类的某些属性时,我通常会选择。
推荐阅读
- r - 无法从 github 安装软件包 - 无法解释的错误消息
- laravel-nova - Laravel Nova - 如何在索引上显示部分文本区域文本
- acumatica - 将主要列表添加到站点地图
- php - jQuery 到 PHP 提交和发布不返回任何结果
- android - 将数据从 Fragment 中的 RecyclerView 传递到另一个 Fragment
- uwp-xaml - XLS0413 在类型“TreeView”中找不到属性“ItemsSource”
- c# - 从 xlsx 文件读取/写入 CustomDocumentProperties 而无需互操作
- javascript - 为什么承诺写成“then(..).catch(..)”?
- java - 调用函数的按钮导致被调用函数的参数变为空?
- python - TypeError:KMeans() 得到了一个意外的关键字参数“n_clusters”