Весенний отдых. Устранить свойство json на HTTP.POST
Я пытаюсь исключить возможность модификации поля json при операции HTTP.POST. Это мой класс:
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class UserModel {
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private Long userId;
@NotNull
private String username;
private RoleModel role;
@NotNull
private String email;
@NotNull
private String firstName;
@NotNull
private String secondName;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String password;
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private Date registrationDate;
}
Я хочу, например, чтобы свойство userId было доступно только для чтения (http get). Я пытался с @JsonProperty, но он не работает, вместо этого он работает для поля пароля. (это свойство видно только для записи / публикации).
Подскажите пожалуйста, где я не прав? или если есть более элегантный способ сделать это?
Большое спасибо,
1 ответ
Решение
Этого можно добиться с помощью аннотации @JsonView:
// Declare views as you wish, you can also use inheritance.
// GetView also includes PostView's fields
public class View {
interface PostView {}
interface GetView extends PostView {}
}
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class UserModel {
@JsonView(View.GetView.class)
private Long userId;
@JsonView(View.PostView.class)
@NotNull
private String username;
....
}
@RestController
public class Controller {
@JsonView(View.GetView.class)
@GetMapping("/")
public UserModel get() {
return ... ;
}
@JsonView(View.PostView.class)
@PostMapping("/")
public UserModel post() {
return ... ;
}
...
}
Для получения дополнительной информации: https://spring.io/blog/2014/12/02/latest-jackson-integration-improvements-in-spring