在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ 項目中常用的后端數(shù)據(jù)校驗框架有哪些?HibernateValidator只能校驗

項目中常用的后端數(shù)據(jù)校驗框架有哪些?HibernateValidator只能校驗對象,對于基本數(shù)據(jù)類型的參數(shù)用哪種方式校驗好?

如下方法中,只能對UserDto對象進(jìn)行校驗,但對于name參數(shù)無法進(jìn)行校驗,大家常用什么方式對參數(shù)進(jìn)行校驗?zāi)兀?/p>

@ResponseBody
@RequestMapping(value = "/validate", method = RequestMethod.GET)
public ResponseEntity<String> validate(@Valid @NotBlank String name, @Valid UserDto userDto, BindingResult result){
    
}
    

還有,常用是在controller層進(jìn)行校驗?zāi)??還是在service層比較好?接收參數(shù)的對象命名使用dto好還是vo好?如果使用hibernatevalidator會不會導(dǎo)致接收參數(shù)的小對象激增,那么命名上要怎么管理?

大家有什么好的實踐經(jīng)驗,歡迎討論

回答
編輯回答
念舊

可以采用在訪問方法時就對參數(shù)進(jìn)行校驗,采用自定義注解的形式,通過自定義注解的相應(yīng)的aop去寫邏輯進(jìn)行校驗。

2018年6月5日 11:29
編輯回答
萌二代

我們一個項目中實體類的驗證,用的是開源平臺JeeSet:
圖片描述

不知道你為什么認(rèn)為實體類字段無法后臺校驗?
Controller中驗證的方法:
圖片描述

2018年8月17日 18:25
編輯回答
笨小蛋

我嘗試修改了你的方法,將它改成下面這樣:

@ResponseBody
@RequestMapping(value = "/validate", method = RequestMethod.GET)
public ResponseEntity<String> validate(@RequestParam String name, @Valid UserDto userDto, BindingResult result){
    
}

這個方法會校驗name參數(shù)不為空。

另外,針對你的幾個問題,做出簡單回答。

Q1.常用是在controller層進(jìn)行校驗?zāi)??還是在service層比較好?
A1:校驗通常放在Controller,可以使用Spring MVC配合JSR 303做請求參數(shù)校驗。Service只負(fù)責(zé)處理業(yè)務(wù)邏輯。

Q2.接收參數(shù)的對象命名使用dto好還是vo好?
A2:這要取決于你的接口設(shè)計,如果接口接收的參數(shù)是一個復(fù)合對象,這個對象由多個DTO組成,可以考慮用VO;如果參數(shù)比較簡單,可以直接用DTO??紤]下面的代碼片段:

public class UserVO {
    private UserDTO user;
    private RoleDTO role;
    ...
}
public class UserDTO {
    private String username;
    private String password;
    ...
}

以上個人想法,僅供參考。另外,我找到了這篇文章,希望可以幫到你:

Q3.如果使用hibernatevalidator會不會導(dǎo)致接收參數(shù)的小對象激增,那么命名上要怎么管理?
A3:HibernateValidator本身是JSR303規(guī)范的實現(xiàn),Spring對其做了較好的封裝,使用起來比較方便。如果你擔(dān)心方法參數(shù)過多,可以考慮合并成一個對象。(如果一個方法中超過5個參數(shù),考慮用對象替代)

2018年1月29日 14:55