我在Spring boot驗證方面面臨一個問題。目前,我正在使用Oracle JDK 11.0.12和Spring boot 2.5.4來構建我的專案。我添加了約束條件來驗證欄位,但它并不奏效。我的代碼在這里:
import lombok.Data;
import javax.validation.constraints.NotBlank。
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@Data
public class LoginFormDTO implementsSerializable {
private static final long serialVersionUID = 1L;
@NotBlank(message = "Login must not be blank")/span>
private String login;
@NotNull(message = "必須提供密碼")
private String password;
private boolean rememberMe = false;
}
@RestController
@RequestMapping("/api")
public class AccountResource {
// Logger and autowired components {
@PostMapping("/authenticate")
@ResponseBody
public ResponseEntity<JWTToken> authorize(@Valid @RequestBody LoginFormDTO account){
//一些代碼行
return ResponseEntity.ok().body(new JWTToken(jwt))。
}
pom.xml中的依賴性
<dependencies>/span>
<dependency>/span>
<groupId>/span>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>/span>
<dependency>>
<groupId>/span>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>/span>
<dependency>>
<groupId>/span>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>/span>
<dependency>>
<groupId>/span>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>/span>
<dependency>>
<groupId>/span>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>/span>
<dependency>>
<groupId>/span>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>/span>
<dependency>>
<groupId>/span>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>/span>
<dependency>>
<groupId>/span>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>/span>
<dependency>>
<groupId>/span>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>/span>
<dependency>>
<groupId>/span>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web-services</artifactId>
</dependency>/span>
<dependency>>
<groupId>org.liquidibase</groupId>/span>
<artifactId>liquibase-core</artifactId>
</dependency>/span>
<dependency>>
<groupId>org.thymeleaf.extras</groupId>/span>
<artifactId>thymeleaf-extras-springsecurity5</artifactId>
</dependency>/span>
<dependency>>
<groupId>/span>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</依賴性>/span>
<dependency>>
<groupId>/span>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>/span>
<dependency>>
<groupId>/span>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</依賴性>/span>
<dependency>>
<groupId>/span>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</依賴性>/span>
<dependency>>
<groupId>/span>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>/span>
<dependency>>
<groupId>/span>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>/span>
<dependency>>
<groupId>com.googlecode.libphonenumber</groupId>/span>
<artifactId>libphonenumber</artifactId>
<version>/span>8.12.31</version>
</dependency>/span>
<dependency>>
<groupId>/span>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>/span>3.0.0</version>/span>
</dependency>/span>
<dependency>>
<groupId>/span>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>/span>3.0.0</version>/span>
</dependency>/span>
<dependency>>
<groupId>/span>io.springfox</groupId>
<artifactId>springfox-bean-validators</artifactId>
<version>/span>3.0.0</version>/span>
</dependency>/span>
<dependency>>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>/span>0.9.1</version>/span>
</dependency>/span>
</dependencies>
我希望當我發送帶有body的POST請求時
{
"login": null, //或空字串"",或空字串""。
"密碼": "字串",
"rememberMe": true
}
那么在執行我的authorize(@Valid @RequestBody LoginFormDTO account)函式中的代碼之前,服務器應該驗證欄位,然后拋出例外或錯誤(因為違反空約束),但它沒有。那么,彈簧驗證有什么問題,還是我錯過了什么?
uj5u.com熱心網友回復:
你可以簡化你的Controller。你有太多的注釋在做同樣的事情,甚至還有一些奇怪的東西(你回傳ResponseEntity,但你又告訴Spring這個方法的回傳應該是Response Body)。
這可能無法解決@Valid的問題,但可以肯定的是,它將變得更加簡單:
@RestController
@RequestMapping("/api")
public class AccountResource {
// Logger and autowired components {
@PostMapping("/authenticate")
@ResponseStatus(HttpStatus.OK)
public JWTToken authorize(@Valid @RequestBody LoginFormDTO account) {
//一些代碼行
return new JWTToken(jwt)。
}
@RestController本身注釋了@Controller和@ResponseBody,這意味著@RequestMapping方法默認承擔@ResponseBody語意,所以你不需要明確添加它。
uj5u.com熱心網友回復:
我發現我的SwaggerConfig類應該使用BeanValidatorPluginsConfiguration.class而不是SpringValidatorAdapter.class在@Import({})。現在我的驗證器作業正常了。感謝Jo?o Dias支持我解決這個問題,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/311800.html
標籤:
下一篇:螞蟻金服的設計表格沒有得到驗證
