@JsonIgnore字段不使用邮递员

时间:2018-05-26 11:43:17

标签: java json spring restful-url

我使用@JsonIgnore注释来防止在向用户发送用户详细信息时向用户公开密码:

public class UserDto {

    private String username;

    @JsonIgnore
    private String password;

}

以下是用户API的响应:

{
 "username": "test12"
}

但是在我点击保存API并发送时保存新用户 在数据之下,我的控制器方法正在使用null密码 @JsonIgnore并获得空指针异常;

{
 "username": "test1225",
 "password": "admin"
}

控制器方法:

    @RequestMapping(value = "/addAccount", method = RequestMethod.POST)
    public ResponseEntity<Void> addAccount(@RequestBody UserDto userDto) {
        User user = new User();
        user.setUsername(userDto.getUsername());
        user.setPassword(userDto.getPassword());

        userService.saveUser(user);
        return new ResponseEntity<Void>(HttpStatus.CREATED);        
    }

返回时有没有办法忽略Password参数 响应用户时不要忽略密码字段值 在控制器方法中获取请求体中的密码参数?

1 个答案:

答案 0 :(得分:0)

您可以使用JsonView来指定序列化/反序列化期间应包含哪些字段。请查看此博客文章,了解JsonViews - http://www.baeldung.com/jackson-json-view-annotation

对于您的问题,您可以创建一个名为UserResponse的视图。

public class UserResponse {
}

并使用@JsonView(UserResponse.class)

注释要返回的UserDto字段
public class UserDto {

    @JsonView(UserResponse.class)
    private String username;

    private String password;

}

在控制器中,在返回类型上添加JsonView注释。

public @JsonView(UserResponse.class) ResponseEntity<Void> addAccount(@RequestBody UserDto userDto) {