博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在Spring MVC中使用注解的方式校验RequestParams
阅读量:5327 次
发布时间:2019-06-14

本文共 3552 字,大约阅读时间需要 11 分钟。

概述

  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;    }}

代码

参考

转载于:https://www.cnblogs.com/xiaohunshi/p/5693449.html

你可能感兴趣的文章
facade层,service 层,domain层,dao 层设计
查看>>
拉格朗日定理
查看>>
【是程序猿就干了这碗心灵鸡汤】我们这一代人的困惑
查看>>
HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth之完全详解
查看>>
java 判断两个时间相差的天数
查看>>
线性表的链式存储结构-----链表
查看>>
centos6下yslow部署
查看>>
理解 Objective-c "属性"
查看>>
CLOUD常用设置
查看>>
[zhuan]asp.net程序性能优化的七个方面 (c#(或vb.net)程序改进)
查看>>
日志分隔工具Cronolog
查看>>
hibernate FetchType理解
查看>>
GNU make 汇总
查看>>
理解结构与表现相分离
查看>>
C++STL中vector容器 begin()与end()函数、front()与back()的用法 ...
查看>>
Nodejs与Java通用AES加解密
查看>>
http请求POST和GET调用接口以及反射动态调用Webservices类
查看>>
hello,world!
查看>>
Phoenix Tips (8) 多租户
查看>>
[您有新的未分配科技点][BZOJ3545&BZOJ3551]克鲁斯卡尔重构树
查看>>