Поле @JsonIgnore не использует данные Почтальона - PullRequest
0 голосов
/ 26 мая 2018

Я использовал аннотацию @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);        
    }

Есть ли способ игнорировать параметр Пароль при возврате ответа пользователю и не игнорировать значение поля пароля при получении параметра пароля в теле запроса в методе контроллера?

1 Ответ

0 голосов
/ 27 мая 2018

Вы можете использовать JsonView s, чтобы указать, какие поля должны быть включены во время сериализации / десериализации.Взгляните на этот пост в блоге, чтобы узнать о JsonViews - http://www.baeldung.com/jackson-json-view-annotation.

. Для вашей проблемы вы можете создать представление с именем UserResponse.

public class UserResponse {
}

и аннотировать поля UserD, для которых выхотите вернуться с @JsonView(UserResponse.class)

public class UserDto {

    @JsonView(UserResponse.class)
    private String username;

    private String password;

}

И в вашем контроллере добавьте аннотацию JsonView к типу возврата.

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