Spring 休息。在 HTTP.POST 处消除 json 属性
Spring Rest. Eliminate json property at HTTP.POST
我试图排除 json 字段在 HTTP.POST 操作中被修改的可能性。这是我的 class:
@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 但它不起作用,而是适用于 password 字段。 (此 属性 仅对写入可见/ post)。
你能告诉我哪里错了吗?或者是否有更优雅的方法来做到这一点?
非常感谢,
你可以用@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
我试图排除 json 字段在 HTTP.POST 操作中被修改的可能性。这是我的 class:
@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 但它不起作用,而是适用于 password 字段。 (此 属性 仅对写入可见/ post)。
你能告诉我哪里错了吗?或者是否有更优雅的方法来做到这一点?
非常感谢,
你可以用@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