色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

java - SpringMVC集成hibernate validator進(jìn)行參數(shù)驗(yàn)證時(shí),為什么不直接拋異常?

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

問題描述

各位大神好,請(qǐng)教個(gè)問題

1.環(huán)境

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()顯示判斷?難道不能驗(yàn)證UserRequest中的字段不符合定義就直接拋異常,這樣不更合理些嗎?

問題解答

回答1:

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

例如我們?cè)趨?shù)異常的時(shí)候返回給前端的是異常的具體參數(shù)名和描述,不是 Spring 給出的所有異常信息,如果 Spring 自動(dòng)拋出異常,那么返回的信息你自己就不好控制了。

@PostMapping(UriView.REST_KNOWLEDGE_POINTS)@ResponseBodypublic Result createKnowledgePoint(@Valid KnowledgePoint knowledgePoint, BindingResult bindingResult) { // 如有參數(shù)錯(cuò)誤,則返回錯(cuò)誤信息給客戶端 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 中的錯(cuò)誤信息很多,對(duì)用戶不夠友好,使用 getBindingMessage() * 提取對(duì)用戶閱讀友好的定義驗(yàn)證規(guī)則 message。 * * @param result 驗(yàn)證的結(jié)果對(duì)象 * @return 驗(yàn)證規(guī)則 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:

你只是在你的應(yīng)用場(chǎng)景中考慮為什么,一個(gè)框架更多的是考慮大多數(shù)時(shí)候怎么做最合理。

大部分對(duì)于客戶端數(shù)據(jù)的驗(yàn)證都不應(yīng)當(dāng)被當(dāng)作“異常”,而是用戶在不知道的情況下被允許犯的錯(cuò)誤。

標(biāo)簽: java
主站蜘蛛池模板: 91久久精一区二区三区大全 | 一本本久综合久久爱 | 国产一区二区中文字幕 | 国产精品久久久久久久久久直 | 亚洲系列中文字幕一区二区 | 怡红院免费的全部视频国产a | 暖暖在线精品日本中文 | 欧美一区二区在线播放 | 国内美女福利视频在线观看网站 | 日本卡一卡2卡3卡4精品卡无人区 | 欧美一级毛片欧美一级成人毛片 | 亚洲精品国产一区二区 | 久青草国产97香蕉在线视频xx | 男人都懂的网址在线看片 | 美女张开双腿让男人桶视频免费 | 视频一区视频二区在线观看 | 精品成人免费一区二区在线播放 | 女网址www呦 | freesex寂寞老妇hd | 中文字幕在线看视频一区二区三区 | 免费国产99久久久香蕉 | 鲁丝一区二区三区不属 | 国产欧美日韩综合精品一区二区 | 视频在线一区二区 | 国产精品成人影院 | 日韩久草| 国产成人毛片亚洲精品不卡 | 欧美一级毛片欧美大尺度一级毛片 | 国产裸体美女视频全黄 | 一级做a爰片久久毛片免费看 | 亚洲精品一区二区综合 | 三级全黄的视频 | 在线播放波多野结衣 | 国产精品久久国产三级国电话系列 | 国产精品亚洲玖玖玖在线靠爱 | 男人天堂手机在线 | 日本经典在线三级视频 | 性欧美一级毛片欧美片 | 亚洲精品视频在线 | 色老久久 | 岛国在线永久免费视频 |