资讯专栏INFORMATION COLUMN

spring参数传递和检验

iflove / 1009人阅读

摘要:背景在请求时,要对参数进行检查,以前一直使用如下方式来获取参数,在参数特别多的时候,代码很不简洁。使用注解来对参数进行校验能让代码更整洁。

1.背景

在spring请求时,要对参数进行检查,以前一直使用如下方式来获取参数,在参数特别多的时候,代码很不简洁。

String userId= request.getParameter("userId");

后来使用注解@RequestParam代码整洁了好多

@RequestParam(value = "userId",required=true) String userId

后来对于参数比较多的情况,使用一个bean来接收请求参数

@RequestMapping(value="/saveUser")
public String saveUser(User user) {}

对于比较复杂,有层级关系情况,使用注解@RequestBody实现

public String setUser(@RequestBody String userInfo) {
    //使用fastjson转换为实体类
}

不管使用以上的哪种方式都要对参数进行校验,如果一个个参数的检查是否为空,检查边界范围,会导致代码很多。使用@Valid注解来对参数进行校验能让代码更整洁。

2.使用

本文以实体类接收请求参数为例简单讲解,validation一共有hibernate-validator,javax.validation和spring-validator三种注解,本文主要是简单讲解一下javax.validation的使用

@RequestMapping(value="/saveUser")
@ResponseBody
public JSONObject saveUser(@Valid User user, BindingResult result){
        JSONObject jsonObject = new JSONObject();
        //判断是否检验错误信息
        if(result.hasErrors()){
            //取出第一条错误信息返回
            List list = result.getFieldErrors();
            String errorMessage = CollectionUtils.isEmpty(list)?
                    "参数错误!":list.get(0).getDefaultMessage();
            jsonObject.put("errorMessage",errorMessage );
            return jsonObject;
        }
        //saveUser保存用户信息模块省略
        jsonObject.put("errorMessage","success");
        return jsonObject;
    }
//使用lombok
@Data
public class User implements Serializable{
    @NotNull(message = "用户id不能为空")
    @Pattern(regexp="^d{12}$",message = "用户id非法")
    private String userId;
    private String userName;
    private int age;
}

使用@Valid注解进行参数检查

在没有使用BindingResult时,程序会抛出空指针等异常信息,不能返回自定义信息,网上查了一下需要使用BindingResult来处理Error信息,自定义返回错误数据。

@NotNull,@Pattern,@Size,@Max,@Min,@Digits是我在项目中经常使用的注解

大家可以关注我的公众号:不知风在何处,相互沟通,共同进步。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67350.html

相关文章

  • BeanUtils工具使用细节

    摘要:拷贝操作又一个非常好用的工具类和中分别存在一个,提供了对。除了支持基本类型以及基本类型的数组之外,还支持这些类的对象,其余一概不支持。而且,由于这些类都是采用反射机制实现的,对程序的效率也会有影响。因此,慎用或者使用看效果如何 java bean拷贝操作又一个非常好用的工具类 BeanUitls :spring (org.springframework.beans.BeanUtils)...

    afishhhhh 评论0 收藏0
  • 3.10、在方法参数上使用@ModelAttribute注解

    摘要:本节解释它用在参数上的情形。一个用在方法参数上的注解指示了参数应该从模型这里所说的模型指中获取。方法是一种常用的从数据库中获取属性的方式,可以通过使用注解把这种属性在各个请求之间共享。下一步是数据绑定。   这一部分实例见这个项目的 mvc 分支下的 ModelAttrArgsController.java   上节说过,@ModelAttribute可以用在方法或方法参数上。本节解...

    huhud 评论0 收藏0
  • 一起来学SpringBoot | 第八篇:通用Mapper与分页插件的集成

    摘要:通用是为了解决使用中的基本操作,使用它可以很方便的进行开发,可以节省开发人员大量的时间。当该参数设置为时,时会查询第一页,超过总数时,会查询最后一页。 SpringBoot 是为了简化 Spring 应用的创建、运行、调试、部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖就可以轻易的搭建出一个 WEB 工...

    韩冰 评论0 收藏0
  • SpringMVC之源码分析--HandlerMapping(一)

    摘要:接口接口作用是将请求映射到处理程序,以及预处理和处理后的拦截器列表,映射是基于一些标准的,其中的细节因不同的实现而不相同。该参数是类型,作用是检查所有的映射解析器或使用或为的,默认为,即从上下文中检查所有的。 概述 在Spring MVC启动章节https://segmentfault.com/a/1190000014674239,介绍到了DispatcherServlet的onRef...

    ralap 评论0 收藏0

发表评论

0条评论

iflove

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<