詳解在Spring MVC中使用注解的方式校驗(yàn)RequestParams
概述
Spring MVC支持Bean Validation,通過這個(gè)驗(yàn)證技術(shù),可以通過注解方式,很方便的對(duì)輸入?yún)?shù)進(jìn)行驗(yàn)證,之前使用的校驗(yàn)方式,都是基于Bean對(duì)象的,但是在@RequestParam中,沒有Bean對(duì)象,這樣使得校驗(yàn)無法進(jìn)行,可以通過使用@Validated注解,使得校驗(yàn)可以進(jìn)行。
校驗(yàn)bean對(duì)象
一般校驗(yàn)bean對(duì)象,為了可以自動(dòng)的校驗(yàn)屬性,可以通過兩步解決:
一、聲明對(duì)象
package com.github.yongzhizhan.draftbox.model; import javax.validation.constraints.Size; /** * 帶驗(yàn)證的對(duì)象 * @author zhanyongzhi */public class Foo { private String validString; @Size(min = 1, max = 5) public String getValidString() { return validString; } public void setValidString(final String vValidString) { validString = vValidString; } }
二、通過@Valid注解使用對(duì)象
@ResponseBody@RequestMapping(value = "validObject", method = RequestMethod.POST) @ResponseStatus(HttpStatus.OK) public String validObject( @RequestBody() @Valid Foo vFoo, BindingResult vBindingResult){ return vFoo.getValidString(); }
校驗(yàn)RequestParams
使用校驗(yàn)bean的方式,沒有辦法校驗(yàn)RequestParam的內(nèi)容,一般在處理Get請(qǐng)求的時(shí)候,會(huì)使用下面這樣的代碼:
@ResponseBody@RequestMapping(value = "validString", method = RequestMethod.GET) @ResponseStatus(HttpStatus.OK) public String validString( @RequestParam(value = "str", defaultValue = "") String vStr){ return vStr; }
使用@Valid注解,對(duì)RequestParam對(duì)應(yīng)的參數(shù)進(jìn)行注解,是無效的,需要使用@Validated注解來使得驗(yàn)證生效。操作步驟如下:
一、聲明錯(cuò)誤處理類
package com.github.yongzhizhan.draftbox.controller; import org.springframework.context.annotation.Bean; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Component; import org.springframework.validation.beanvalidation.MethodValidationPostProcessor; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; import javax.validation.ValidationException; @ControllerAdvice @Component public class GlobalExceptionHandler { @Bean public MethodValidationPostProcessor methodValidationPostProcessor() { return new MethodValidationPostProcessor(); } @ExceptionHandler @ResponseBody @ResponseStatus(HttpStatus.BAD_REQUEST) public String handle(ValidationException exception) { System.out.println("bad request, " + exception.getMessage()); return "bad request, " + exception.getMessage(); } }
二、聲明@Validated并加上校驗(yàn)注解
package com.github.yongzhizhan.draftbox.controller; import com.github.yongzhizhan.draftbox.model.Foo; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; import javax.validation.constraints.Size; @RestController @SuppressWarnings("UnusedDeclaration") @Validated public class IndexController { @ResponseBody @RequestMapping(value = "validString", method = RequestMethod.GET) @ResponseStatus(HttpStatus.OK) public String validString( @RequestParam(value = "str", defaultValue = "") @Size(min = 1, max = 3) String vStr){ return vStr; } }
代碼:spring-mvc-validator_jb51.rar
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
springboot項(xiàng)目如何引用公共模塊的bean
這篇文章主要介紹了springboot項(xiàng)目如何引用公共模塊的bean問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08解決Feign切換client到okhttp無法生效的坑(出現(xiàn)原因說明)
這篇文章主要介紹了解決Feign切換client到okhttp無法生效的坑(出現(xiàn)原因說明),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02idea2020.1.3 手把手教你創(chuàng)建web項(xiàng)目的方法步驟
這篇文章主要介紹了idea 2020.1.3 手把手教你創(chuàng)建web項(xiàng)目的方法步驟,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08