@RequestMapping("/get/{id}")
public void getUserById(@PathVariable(value = "id") long id) {
User user = usersService.findOne(id);
json.use(JsonView.with(user)
.onClass(User.class, Match.match()
.exclude("password").exclude("yetAnothertopSecretField")));
}
5条答案
按热度按时间vyswwuz21#
@JsonIgnore
与Access.WRITE_ONLY
仅用于getter方法。范例
cotxawn72#
如果您使用Jackson序列化响应对象,则可以使用@JsonIgnore注解有问题的属性,它将不会包含在响应中。
创建单独的响应对象(仅包含所需字段)也是一个好主意,以防您在以后添加敏感字段时忘记隐藏它们。同样,您也可以使用单独的请求对象来创建包含密码字段的用户。业务实体(如用户)可能最好只在内部使用,这样您就可以控制公开哪些信息。
but5z9lq3#
要避免使用 @JsonIgnore,可以使用json-view library。例如,在控制器中可以执行以下操作:
首先,在控制器变量中声明:
然后用这个方法:
它返回不包含排除字段的JSON。
JsonView和JsonResult类是从json-view库导入的。
bqf10yzr4#
我试过这个
JsonProperty.Access.WRITE_ONLY
,它对我很有效。hzbexzde5#
在发送响应时将“password”字段设置为空,Jackson将不会在响应中显示该字段。不要将其从模型类中完全删除。