博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring校验@RequestParams和@PathVariables参数
阅读量:6847 次
发布时间:2019-06-26

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

我们在写Rest API接口时候会用到很多的@RequestParam和@PathVariable进行参数的传递,但是在校验的时候,不像使用@RequestBody那样的直接写在实体类中,我们这篇文章讲解一下如何去校验这些参数。

依赖配置


  • 要使用Java Validation API,我们必须添加依赖项:
javax.validation
validation-api
2.0.1.Final
  • 通过添加@Validated注解来启用控制器中的@RequestParams和@PathVariables的验证:
@RestController@RequestMapping("/")@Validatedpublic class Controller {    // ...}

校验@RequestParam


  • 我们将数字作为请求参数传递给控制器方法
@GetMapping("/name-for-day")public String getNameOfDayByNumber(@RequestParam Integer dayOfWeek) {    // ...}
  • 我们保证dayOfWeek的值在1到7之间,我们使用@Min和@Max注解
@GetMapping("/name-for-day")public String getNameOfDayByNumber(@RequestParam @Min(1) @Max(7) Integer dayOfWeek) {    // ...}

任何与这些条件不匹配的请求都将返回HTTP状态500,并显示默认错误消息。

如果我们尝试调用这将返回以下响应信息:

There was an unexpected error (type=Internal Server Error, status=500).getNameOfDayByNumber.dayOfWeek: must be less than or equal to 7

当然我们也可以在@Min和@Max注解后面加上message参数进行修改默认的返回信息。

校验@PathVariable


和校验@RequestParam一样,我们可以使用javax.validation.constraints包中的注解来验证@PathVariable。

  • 验证String参数不是空且长度小于或等于10
@GetMapping("/valid-name/{name}")public void test(@PathVariable("name") @NotBlank @Size(max = 10) String username) {    // ...}
  • 任何名称参数超过10个字符的请求都会导致以下错误消息:
There was an unexpected error (type=Internal Server Error, status=500).createUser.name:size must be between 0 and 10

通过在@Size注解中设置message参数,可以覆盖默认消息。

其实我们可以看到校验@RequestParam和@PathVariable参数和我们校验@RequestBody方式一致,只不过一个是写在了实体中,一个写在了外部,当然我们也可以将@RequestParam的参数写入到实体类中,进行使用@RequestParam注解进行引入,比如我们使用一个分页的实例

  • 分页实体类
/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements.  See the NOTICE file * distributed with this work for additional information * regarding copyright ownership.  The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License.  You may obtain a copy of the License at * 

* http://www.apache.org/licenses/LICENSE-2.0 *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package com.zhuanqb.param.page;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import lombok.ToString;import org.hibernate.validator.constraints.NotBlank;import org.hibernate.validator.constraints.NotEmpty;import javax.validation.constraints.Max;import javax.validation.constraints.Min;import javax.validation.constraints.NotNull;/** * PageParam

* 描述 : PageParam
* 作者 : qianmoQ
* 版本 : 1.0
* 创建时间 : 2018-09-23 下午7:40
* 联系作者 : qianmoQ */@Data@ToString@NoArgsConstructor@AllArgsConstructorpublic class PageParam { @NotNull(message = "每页数据显示数量不能为空") @Min(value = 5) @Max(value = 100) private Integer size; // 每页数量 @NotNull(message = "当前页显示数量不能为空") @Min(value = 1) @Max(value = Integer.MAX_VALUE) private Integer page; // 当前页数 private Boolean flag = true;}

  • @RequestParam调用方式
@GetMapping(value = "list")    public CommonResponseModel findAll(@Validated PageParam param) {        ...    }

这样的话可以使我们的校验定制化更加简单。

转载地址:http://hylul.baihongyu.com/

你可能感兴趣的文章
环境变量PATH cp命令 mv命令 文档查看cat/more/less/head/tail
查看>>
阿里云亮相2019联通合作伙伴大会,边缘计算等3款云产品助力5G时代产业数字化转型...
查看>>
dubbo源码分析-服务端发布流程-笔记
查看>>
阿里云发布Apsara SA系列混合云存储阵列
查看>>
GoJS教程:链接模版
查看>>
QListWidget方式显示缩略图
查看>>
金三银四:蚂蚁金服JAVA后端面试题及答案之二面
查看>>
Ubuntu 外网不通解决方案
查看>>
OSChina 周六乱弹 —— 历史总是惊人的相似
查看>>
MySQL 大小写
查看>>
div块上下左右居中
查看>>
eclipse远程debug tomcat
查看>>
CentOs6.5基本环境配置(六):Maven配置
查看>>
Python 创建Django项目
查看>>
JS获取当前项目的根路径
查看>>
操作系统引导区代码
查看>>
程序员有五种错误不应犯
查看>>
无线认证知识点
查看>>
基于python的REST框架eve测试与mongodb的数据操作
查看>>
epoll模型的理解封装与应用
查看>>