详解在Spring MVC中使用注解的方式校验RequestParams

时间:2021-05-19

概述

Spring MVC支持Bean Validation,通过这个验证技术,可以通过注解方式,很方便的对输入参数进行验证,之前使用的校验方式,都是基于Bean对象的,但是在@RequestParam中,没有Bean对象,这样使得校验无法进行,可以通过使用@Validated注解,使得校验可以进行。

校验bean对象

一般校验bean对象,为了可以自动的校验属性,可以通过两步解决:

一、声明对象

package com.github.yongzhizhan.draftbox.model;import javax.validation.constraints.Size;/** * 带验证的对象 * @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();}

校验RequestParams

使用校验bean的方式,没有办法校验RequestParam的内容,一般在处理Get请求的时候,会使用下面这样的代码:

@ResponseBody@RequestMapping(value = "validString", method = RequestMethod.GET)@ResponseStatus(HttpStatus.OK)public String validString( @RequestParam(value = "str", defaultValue = "") String vStr){ return vStr;}

使用@Valid注解,对RequestParam对应的参数进行注解,是无效的,需要使用@Validated注解来使得验证生效。操作步骤如下:

一、声明错误处理类

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@Componentpublic 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并加上校验注解

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")@Validatedpublic 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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章