首页 > 开发 > Java > 正文

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

2024-07-13 10:05:20
字体:
来源:转载
供稿:网友

概述

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.rar

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


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表