詳解在Spring MVC中使用注解的方式校驗(yàn)RequestParams
概述
Spring MVC支持Bean Validation,通過這個(gè)驗(yàn)證技術(shù),可以通過注解方式,很方便的對輸入?yún)?shù)進(jìn)行驗(yàn)證,之前使用的校驗(yàn)方式,都是基于Bean對象的,但是在@RequestParam中,沒有Bean對象,這樣使得校驗(yàn)無法進(jìn)行,可以通過使用@Validated注解,使得校驗(yàn)可以進(jìn)行。
校驗(yàn)bean對象
一般校驗(yàn)bean對象,為了可以自動(dòng)的校驗(yàn)屬性,可以通過兩步解決:
一、聲明對象
package com.github.yongzhizhan.draftbox.model;
import javax.validation.constraints.Size;
/**
* 帶驗(yàn)證的對象
* @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注解使用對象
@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請求的時(shí)候,會(huì)使用下面這樣的代碼:
@ResponseBody@RequestMapping(value = "validString", method = RequestMethod.GET)
@ResponseStatus(HttpStatus.OK)
public String validString(
@RequestParam(value = "str", defaultValue = "")
String vStr){
return vStr;
}
使用@Valid注解,對RequestParam對應(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
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
集合框架及背后的數(shù)據(jù)結(jié)構(gòu)
本文主要介紹了Java的集合框架Java?Collection?Framework,接口interface以及背后的數(shù)據(jù)結(jié)構(gòu),感興趣的同學(xué)可以閱讀參考2023-03-03
MyBatis代碼自動(dòng)生成器Mybatis-Generator的使用詳解
本文詳細(xì)介紹如何在SpringBoot項(xiàng)目中使用MyBatis-Generator進(jìn)行代碼生成,包括配置文件的添加、POM依賴配置、運(yùn)行配置等步驟,通過自動(dòng)生成代碼,可以簡化MyBatis的繁瑣配置和SQL編寫,提高開發(fā)效率,注意要考慮MySQL版本兼容性,以及確保路徑配置正確2024-10-10
FeignMultipartSupportConfig上傳圖片配置方式
這篇文章主要介紹了FeignMultipartSupportConfig上傳圖片配置方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
Spring Boot2.0 @ConfigurationProperties使用詳解
這篇文章主要介紹了Spring Boot2.0 @ConfigurationProperties使用詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-11-11
Java與C++實(shí)現(xiàn)相同的MD5加密算法簡單實(shí)例
下面小編就為大家?guī)硪黄狫ava與C++實(shí)現(xiàn)相同的MD5加密算法簡單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09

