使用注解@Validated和BindingResult對入?yún)⑦M(jìn)行非空校驗(yàn)方式
注解@Validated和BindingResult對入?yún)⒎强招r?yàn)
在項目當(dāng)中少不了入?yún)⑿r?yàn),服務(wù)器和瀏覽器互不信任,不能因?yàn)榍岸思尤雲(yún)⑴袛嗔撕笈_就不處理了,這樣是不對的。
比如前臺傳過來一個對象作為入?yún)?shù),這個對象中有些屬性允許為空,有些屬性不允許為空。那么你還在使用if()else{}進(jìn)行非空判斷嗎?不妨嘗試下使用注解,可以使用@Validated和BindingResult。
注意:BindingResult需要放到@Validated后面
示例代碼如下:普通屬性可以用@NotEmpty() 特殊的使用@NotNull() 比如:枚舉類型
實(shí)體類:什么不允許為空就加
@NotEmpty(groups = {SchoolDTO.SchoolGroup.class},message = "學(xué)校名不能為空")
注意:重要的事情叮囑兩遍。public interface SchoolGroup{} 別忘了加這個!public interface SchoolGroup{} 別忘了加這個!
public class SchoolDTO implements Serializable {
private Long id;
@NotEmpty(groups = {SchoolDTO.SchoolGroup.class},message = "學(xué)校名不能為空")
private String schoolName;
@NotNull
@NotEmpty(groups = {SchoolDTO.SchoolGroup.class},message = "學(xué)校負(fù)責(zé)人不能為空")
private String schoolPrincipal;
@NotNull
@NotEmpty(groups = {SchoolDTO.SchoolGroup.class},message = "職務(wù)不能為空")
private String principalPosition;
@NotNull
@NotEmpty(groups = {SchoolDTO.SchoolGroup.class},message = "聯(lián)系電話不能為空")
private String schoolPhone;
//getter setter tostring 省略
public interface SchoolGroup{} 別忘了加這個
}
控制層:在入?yún)ο笊霞覢Validated({SchoolDTO.SchoolGroup.class}), BindingResult bindingResult @Validated進(jìn)行驗(yàn)證,BindingResult可以獲取校驗(yàn)錯誤信息
@PostMapping("/schools")
@PreAuthorize("hasRole(\"" + AuthoritiesConstants.ADMIN + "\")")
public Map<String,Object> createSchool(@RequestBody @Validated({SchoolDTO.SchoolGroup.class}) SchoolDTO schoolDTO,BindingResult bindingResult) throws Exception {
//返回校驗(yàn)錯誤信息
Map<String,Object>map=new HashMap<>();
if(bindingResult.hasErrors()){
map.put("success","false");
map.put("message",bindingResult.getAllErrors());
return map;
}
// .........業(yè)務(wù)省略
return map;
}
}
測試:入?yún)⒌臅r候我沒有傳principalPosition和schoolPhone

@Validated 和 BindingResult 使用遇到的坑
@Validated 與BindingResult 需要相鄰,否則 變量result 不能接受錯誤信息
控制臺輸出
Field error in object 'entity' on field '變量': rejected value [null]; codes [NotNull.entity.變量,NotNull.變量,NotNull.java.lang.String,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes
正確的內(nèi)容截圖

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
- Spring利用@Validated注解實(shí)現(xiàn)參數(shù)校驗(yàn)詳解
- Java中的三種校驗(yàn)注解的使用(@Valid,@Validated和@PathVariable)
- 快速校驗(yàn)實(shí)體類時,@Valid,@Validated,@NotNull注解無效的解決
- SpringBoot @Validated注解實(shí)現(xiàn)參數(shù)分組校驗(yàn)的方法實(shí)例
- spring @Validated 注解開發(fā)中使用group分組校驗(yàn)的實(shí)現(xiàn)
- 使用@Validated注解進(jìn)行校驗(yàn)卻沒有效果的解決
相關(guān)文章
基于Java實(shí)現(xiàn)一個高效可伸縮的計算結(jié)果緩存
這篇文章將通過對一個計算結(jié)果緩存的設(shè)計迭代介紹,分析每個版本的并發(fā)缺陷,并分析如何修復(fù)這些缺陷,最終完成一個高效可伸縮的計算結(jié)果緩存,感興趣的小伙伴可以了解一下2023-06-06
IDEA利用jclasslib 修改class文件的實(shí)現(xiàn)
這篇文章主要介紹了IDEA利用jclasslib 修改class文件的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
javacv開發(fā)詳解之調(diào)用本機(jī)攝像頭視頻
這篇文章主要介紹了javacv開發(fā)詳解之調(diào)用本機(jī)攝像頭視頻,對javacv感興趣的同學(xué),可以參考下2021-04-04
IDEA實(shí)現(xiàn)導(dǎo)入module并成功運(yùn)行
這篇文章主要介紹了IDEA實(shí)現(xiàn)導(dǎo)入module并成功運(yùn)行方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04

