我正在撰寫帶有注釋 @RequestBody 的控制器,以便映射到 Java 物件。使用注解的方法是:
@PostMapping("/users")
public ResponseEntity<Object> createUserForProject(@Valid @RequestBody User user) {
log.info("Creating a user " user.getEmail());
}
這是用戶類:
@Getter
@AllArgsConstructor
@Slf4j
@EqualsAndHashCode
@ToString
public class User {
@NotEmpty
@Email
private String email;
@NotEmpty
private String firstName;
@NotEmpty
private String lastName;
@JsonIgnore
private Optional<LocalDate> lastLogonDate = Optional.empty();
@JsonIgnore
private Optional<LocalDate> lastModificationDate = Optional.empty();
@JsonIgnore
private Optional<LocalDate> creationDate = Optional.empty();
@JsonIgnore
private Optional<LocalDate> mfaWarningDate = Optional.empty();
@JsonIgnore
private Optional<LocalDate> auditStartNotificationDate = Optional.empty();
@JsonIgnore
private boolean enabled = true;
public User() {
log.info("HI");
}
(More code without explicit setters)
所以當我用身體進行 POST 呼叫時
{
"email":"[email protected]",
"firstName":"testName",
"lastName":"testLastName"
}
輸出HI和帶有創建用戶 [email protected]訊息的日志,因此創建了物件。我的意思是......為什么這真的有效?HttpMessageConverter 正在呼叫無引數建構式,并且在使用建構式創建物件后沒有要呼叫的設定器。物件屬性如何在沒有任何設定器的情況下獲取它們的值?我在這里想念什么?
uj5u.com熱心網友回復:
Spring boot 使用 Jackson 進行 Object <-> JSON 轉換,而 Jackson 不需要 setter,它通過反射設定欄位。
這是關于杰克遜的一個相關問題以及為什么它不需要設定 器杰克遜如何在沒有設定器的情況下設定私有屬性?
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/425719.html
