公眾號中分享了一篇文章,關于SpringBoot集成validation校驗引數的,粉絲留言說有坑,
原留言如下:
有坑,你試試^A-\\d{12}-\\d{4}$,這條正則經過validate這個方法無論引數寫的對不對都會報驗證錯誤,而用main方法測驗是正常的,,
話說,針對這種回復我是不太信了,直覺告訴我,肯定是這位粉絲用錯了,但既然粉絲有疑問還是需要專門寫一個demo來驗證一下的,說寫就寫,
SpringBoot集成validation
集成程序非常簡單,在原專案的pom檔案中直接引入如下依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
引入之后,便可以在專案中使用@Valid等來進行校驗了,
這里寫一個簡單的示例基于@Valid來驗證提交的引數是否合法,首先建一個物體類,LoginForm(使用了Lombok):
@Data
public class LoginForm {
@NotBlank(message = "郵箱不能為空")
@Email
private String email;
@NotBlank(message = "密碼不能為空")
@Length(min = 6,message = "密碼長度最小為6位")
private String password;
@NotBlank
@Pattern(regexp = "^A-\\d{12}-\\d{4}$",message = "格式錯誤")
private String other;
}
順便校驗了一下其他的引數,最后一個other欄位用來校驗粉絲提出疑問的正則運算式,
然后,在創建一個Controller類:
@Slf4j
@RestController
public class LoginController {
@PostMapping("/login")
public void login(@Valid LoginForm loginForm, BindingResult bindingResult) {
log.info("loginForm:{}", loginForm);
if (bindingResult.hasErrors()) {
for (ObjectError error : bindingResult.getAllErrors()) {
log.info("error:{}", error.getDefaultMessage());
}
} else {
log.info("引數校驗成功!");
}
}
}
如果引數校驗出錯,會列印錯誤日志,如果校驗成功則列印“引數校驗成功!”,因為是Post請求,咱們就寫一個針對該服務的單元測驗:
@Slf4j
@SpringBootTest
@RunWith(SpringRunner.class)
@AutoConfigureMockMvc
@WebAppConfiguration
public class TestLoginController {
@Autowired
private WebApplicationContext webApplicationContext;
@Autowired
private MockMvc mockMvc;
@Before
public void setUp() {
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
@Test
public void testLogin() throws Exception {
MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/login")
.param("email", "541075754@qq.com")
.param("password", "123456")
.param("other", "A-123456789012-1234")
.accept(MediaType.APPLICATION_JSON))
.andDo(MockMvcResultHandlers.print())
.andReturn();
int status = mvcResult.getResponse().getStatus(); //得到回傳代碼
String content = mvcResult.getResponse().getContentAsString(); //得到回傳結果
log.info("回傳結果content={}", content);
Assert.assertEquals(200, status);
}
}
執行列印測驗,查看日志,發現校驗通過,并沒有出錯,至此,粉絲提出的質疑并不成立,而粉絲遇到的問題,很可能是哪個細節導致了校驗失敗,而他總結的經驗就是validation校驗引數有坑,
其實這個問題在沒有人相互交流的程序中更容易發生,這樣是為什么技術人要有自己的圈子,要聚集起來,討論見真知,最后,歡迎訪問我的微信公眾號:程式新視界,也歡迎提出更多關于疑問,大家一起進步,
原文鏈接:《粉絲說SpringBoot集成validation校驗引數有坑,我試了試》

CSDN認證博客專家
Spring
架構
Java
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/235569.html
標籤:其他
上一篇:阿里云物聯網平臺快速入門實踐
