亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

java - SpringMVC集成hibernate validator進行參數驗證時,為什么不直接拋異常?

瀏覽:102日期:2023-10-27 14:01:40

問題描述

各位大神好,請教個問題

1.環境

spring 4.3.7hibernate-validator-5.4.1

2.配置如下

<bean name='messageSource'><property name='basenames'> <list><value>classpath:messages/messages</value><value>classpath:messages/ValidationMessages</value> </list></property><property name='useCodeAsDefaultMessage' value='false' /><property name='defaultEncoding' value='UTF-8' /><property name='cacheSeconds' value='60' /> </bean> <bean class='org.springframework.validation.beanvalidation.LocalValidatorFactoryBean'><property name='providerClass' value='org.hibernate.validator.HibernateValidator'/><property name='validationMessageSource' ref='messageSource'/> </bean> <mvc:annotation-driven validator='validator' />

3.bean和Controller

public class UserRequest {@NotBlank(message = '{login.valid.username.notnull}') private String username;@NotBlank(message = '{login.valid.password.notnull}') private String password; public String getUsername() {return username; } public void setUsername(String username) {this.username = username; } public String getPassword() {return password; } public void setPassword(String password) {this.password = password; }}

@RequestMapping(value = '/login', method = RequestMethod.POST) @ResponseBody public Object login(@Valid @RequestBody UserRequest ur, BindingResult result, HttpServletRequest request) {log.debug('login');if(result.hasErrors()) { return result.getAllErrors().get(0); } …… }

問題:為什么一定要在代碼中用result.hasErrors()顯示判斷?難道不能驗證UserRequest中的字段不符合定義就直接拋異常,這樣不更合理些嗎?

問題解答

回答1:

問題:為什么一定要在代碼中用result.hasErrors()顯示判斷?難道不能驗證UserRequest中的字段不符合定義就直接拋異常,這樣不更合理些嗎?

例如我們在參數異常的時候返回給前端的是異常的具體參數名和描述,不是 Spring 給出的所有異常信息,如果 Spring 自動拋出異常,那么返回的信息你自己就不好控制了。

@PostMapping(UriView.REST_KNOWLEDGE_POINTS)@ResponseBodypublic Result createKnowledgePoint(@Valid KnowledgePoint knowledgePoint, BindingResult bindingResult) { // 如有參數錯誤,則返回錯誤信息給客戶端 if (bindingResult.hasErrors()) {return Result.fail(CommonUtils.getBindingMessage(bindingResult)); } knowledgePoint.setKnowledgePointId(CommonUtils.uuid()); knowledgePoint.setName(knowledgePoint.getName().trim()); mapper.createKnowledgePoint(knowledgePoint); return Result.ok('', knowledgePoint);}/** * BindingResult 中的錯誤信息很多,對用戶不夠友好,使用 getBindingMessage() * 提取對用戶閱讀友好的定義驗證規則 message。 * * @param result 驗證的結果對象 * @return 驗證規則 message */public static String getBindingMessage(BindingResult result) { StringBuffer sb = new StringBuffer(); for (FieldError error : result.getFieldErrors()) {// sb.append(error.getField() + ' : ' + error.getDefaultMessage() + 'n');sb.append(error.getDefaultMessage() + 'n'); } return sb.toString();}回答2:

你只是在你的應用場景中考慮為什么,一個框架更多的是考慮大多數時候怎么做最合理。

大部分對于客戶端數據的驗證都不應當被當作“異常”,而是用戶在不知道的情況下被允許犯的錯誤。

標簽: java
主站蜘蛛池模板: 一本色道久久88亚洲综合 | 亚洲国产精品a在线 | 国产日韩欧美在线一区二区三区 | 国产美女做爰免费视频软件 | 99久久免费国产精精品 | 久久香蕉国产线看观看精品蕉 | 国产福利一区二区三区视频在线 | 亚洲精品第一页中文字幕 | 国产成人精品免费视频动漫 | 一区二区三区在线 | 日本 | 欧美日本二区 | 成人看的午夜免费毛片 | 美国美女一级片 | 黄色毛片在线 | 国产精品综合色区在线观看 | 影音先锋5566中文源资源 | 国内真实实拍伦视频在线观看 | 在线97视频 | 无码一区二区三区视频 | 国产一区在线观看视频 | 亚洲丁香婷婷综合久久六月 | 青青草在线视频免费观看 | 日日摸夜夜添夜夜添欧美毛片 | 午夜精品久久久 | 久久99精品国产麻豆宅宅 | 91国在线视频 | 日本中文字幕乱码免费 | 国产情侣真实露脸在线 | 国产91香蕉在线精品 | 一区二区三区免费高清视频 | 国产精品一区二区三区四区五区 | a毛片基地免费全部香蕉 | 精品视频久久久 | 一a一片一级一片啪啪 | 欧美精品久久久久久久久大尺度 | 国产在线视频精品视频免费看 | 国产精品麻豆99久久 | 日本欧美一区二区三区免费不卡 | 欧美日韩国产另类一区二区三区 | 有码日韩 | 青青草国产免费国产 |