我寫了端點的例子來理解我的問題的含義。
我意識到由于@Valid注釋,我的測驗沒有通過。
例如。我有兩個端點,如果有人點擊舊端點,則需要檢查是否設定了電子郵件,因為它有@NotBlank注釋。但是當我用設定的電子郵件詢問我的端點時,@Valid沒有執行我意識到在使用無效資料進行測驗后。而且我無法設定@Valid ,oldPutContact因為有些聯系人沒有電子郵件。
我的問題是為什么putContact不執行@Valid注釋。
@PutMapping(value = "/contact/{contactid}", )
public String oldPutContact(@RequestBody Contact contact)
if(StringUtils.isBlank(contact.getEmail())){
contact.setEmail("[email protected]") ;
}
return putContact(contact);
}
@PutMapping(value = "/contact/update/{contactid}")
public String putContact(@RequestBody @Valid Contact contact) {
contactService.updateContact(contact);
}
想象一下聯系人物體看起來像這樣
@Builder(toBuilder=true)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Contact {
private static final String SOME_PATTERN = "";
private static final String SOME_EMAIL_PATTERN = "";
private static final String SOME_PATTERN2 = "";
@NotBlank
private String id;
@NotNull
private Boolean isActive;
@NotBlank
@Pattern(regexp = SOME_PATTERN)
private String name;
@NotBlank
@Pattern(regexp = SOME_PATTERN)
private String surname;
@NotBlank
@Email(regexp = SOME_EMAIL_PATTERN)
private String email;
@NotBlank
@Pattern(regexp = SOME_PATTERN2)
private String telephone;
}
uj5u.com熱心網友回復:
首先,您應該為您的引數定義驗證規則。例如(注意NotBlank注釋):
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@NotBlank(message = "Name is mandatory")
private String name;
@NotBlank(message = "Email is mandatory")
private String email;
// standard constructors / setters / getters / toString
}
然后你可以在rest api控制器中使用有效的注釋。像這樣:
@RestController
public class UserController {
@PostMapping("/users")
ResponseEntity<String> addUser(@Valid @RequestBody User user) {
// persisting the user
return ResponseEntity.ok("User is valid");
}
// standard constructors / other methods
}
您不能定義驗證規則。所以spring不知道如何驗證引數。
請參閱Spring 驗證以獲取更多資訊。
----通過閱讀@nusia 的評論,添加以下說明。
從示例代碼“public String putContact(@RequestBody @Valid String contact)”中,我看不到您在哪里定義了@NotBlank 引數的String contact 注釋,或者您的意思是引數“contact”的型別不是字串?如果“聯系人”的型別是定義的物體并且其電子郵件欄位具有 NotBlank 注釋。然后從 HTTP PUT 請求呼叫新端點“putContact”將觸發 spring 驗證,但如果您的意思是從舊方法“oldPutContact”呼叫新方法“putContact”,則不會觸發 spring 驗證,原因類似于從同一個類呼叫 spring 注釋方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/312730.html
