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