返回顶部
首页 > 资讯 > 精选 >SpringBoot常见get/post请求参数处理的方法
  • 272
分享到

SpringBoot常见get/post请求参数处理的方法

2023-06-29 12:06:01 272人浏览 泡泡鱼
摘要

这篇文章主要介绍了SpringBoot常见get/post请求参数处理的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇springBoot常见get/post请求参数处理的方法文章都会有所收获,下面我们一起

这篇文章主要介绍了SpringBoot常见get/post请求参数处理的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇springBoot常见get/post请求参数处理的方法文章都会有所收获,下面我们一起来看看吧。

    Spring Boot 常见Http get ,post请求参数处理

    在定义一个Rest接口时通常会利用GET、POST、PUT、DELETE来实现数据的增删改查;这几种方式有的需要传递参数,后台开发人员必须对接收到的参数进行参数验证来确保程序的健壮性

    • GET
      一般用于查询数据,采用明文进行传输,一般用来获取一些无关用户信息的数据

    • POST
      一般用于插入数据

    • PUT
      一般用于数据更新

    • DELETE
      一般用于数据删除
      一般都是进行逻辑删除(即:仅仅改变记录的状态,而并非真正的删除数据)

    @PathVaribale 获取url中的数据

    @RequestParam 获取请求参数的值

    @GetMapping 组合注解,是 @RequestMapping(method = RequestMethod.GET) 的缩写

    @RequestBody 利用一个对象去获取前端传过来的数据

    PathVaribale 获取url路径的数据

    请求URL:

    localhost:8080/hello/id 获取id值

    实现代码如下:

    @RestControllerpublic class HelloController {    @RequestMapping(value="/hello/{id}/{name}",method= RequestMethod.GET)    public String sayHello(@PathVariable("id") Integer id,@PathVariable("name") String name){        return "id:"+id+" name:"+name;    }}

    在浏览器中 输入地址:

    localhost:8080/hello/100/hello

    输出:

    id:81name:hello

    RequestParam 获取请求参数的值

    获取url参数值,默认方式,需要方法参数名称和url参数保持一致

    localhost:8080/hello?id=1000

    @RestControllerpublic class HelloController {    @RequestMapping(value="/hello",method= RequestMethod.GET)    public String sayHello(@RequestParam Integer id){        return "id:"+id;    }}

    输出:

    id:100

    url中有多个参数时,如:

    localhost:8080/hello?id=98&&name=helloworld

    具体代码如下:

    @RestControllerpublic class HelloController {    @RequestMapping(value="/hello",method= RequestMethod.GET)    public String sayHello(@RequestParam Integer id,@RequestParam String name){        return "id:"+id+ " name:"+name;    }}

    获取url参数值,执行参数名称方式

    localhost:8080/hello?userId=1000

    @RestControllerpublic class HelloController {    @RequestMapping(value="/hello",method= RequestMethod.GET)    public String sayHello(@RequestParam("userId") Integer id){        return "id:"+id;    }}

    输出:

    id:100

    注意

    不输入id的具体值,此时返回的结果为null。具体测试结果如下:

    id:null

    不输入id参数,则会报如下错误:

    whitelable Error Page错误

    GET参数校验

    用法:不输入id时,使用默认值

    具体代码如下:

    localhost:8080/hello

    @RestControllerpublic class HelloController {    @RequestMapping(value="/hello",method= RequestMethod.GET)    //required=false 表示url中可以无id参数,此时就使用默认参数    public String sayHello(@RequestParam(value="id",required = false,defaultValue = "1") Integer id){        return "id:"+id;    }}

    输出

    id:1

    POST JSON参数校验

    常用校验注解

    SpringBoot常见get/post请求参数处理的方法

    注意:

    接收到的参数默认都是字符串类型的

    有的注解只能用在String类型的属性上

    @jsonProperty可以实现前端的属性名和后台实体类的属性名不一致问题

    校验方式:

    使用@RequestBody @Valid 对JSON参数进行获取和校验。

    通过BindingResult bindingResult 去获取校验结果。

    BindingResult 源码

    SpringBoot常见get/post请求参数处理的方法

    技巧01:利用BindingResult对象的hasErrors方法判断是否有参数错误

    技巧02:利用BindingResult对象的getFieldErrors方法获取所有有参数错误的属性

    技巧03:利用错误属性对象的getDefaultMessage去获取错误提示信息

    @RequestMapping(value = "/demo5",produces = MediaType.TEXT_PLaiN_VALUE)    @ResponseBody    public String test5(@RequestBody @Valid  User user , BindingResult bindingResult){        if(bindingResult.hasErrors()){            List<ObjectError> objectErrors = bindingResult.getAllErrors();            System.out.println(objectErrors.toString());            for(ObjectError objectError: objectErrors){                System.out.println("objectError = " + objectError.getObjectName());                System.out.println("objectError = " + objectError.getDefaultMessage());                System.out.println("objectError = " + objectError.getCode());                System.out.println("objectError = " + objectError.getArguments());            }        }        String str =  user.toString();        return str;    }

    对应User实体类代码:

    public class User {    @NotEmpty(message = "ID不能为空")    @NotBlank(message = "ID不能为空哟")    private String id;    @Min(value = 18)    @Max(value = 30)    private Integer age;    @NotEmpty(message = "昵称不能为空")    @NotBlank(message = "昵称不能为空哟")    @JsonProperty("nickname") //  当前端属性为nick后台接收对象的属性为nickName时可以用@JsonProperty来保持一致    private String name;    ....省略get set方法

    自定义注解校验

    定义一个校验注解

    代码如下:

    import javax.validation.Constraint;import javax.validation.Payload;import java.lang.annotation.*;@Documented@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.PARAMETER, ElementType.FIELD})@Constraint(validatedBy = MyFORMValidatorClass.class)public @interface MyFormValidator {    String value();    String message() default "name can be test";    Class<?>[] groups() default {};    Class<? extends Payload>[]  payload() default {};}

    定义一个约束校验

    import javax.validation.ConstraintValidator;import javax.validation.ConstraintValidatorContext;import java.lang.annotation.Annotation;public class MyFormValidatorClass implements ConstraintValidator<MyFormValidator, Object>, Annotation {    private String values;    @Override    public void initialize(MyFormValidator myFormValidator) {        this.values = myFormValidator.value();    }    @Override    public boolean isValid(Object value, ConstraintValidatorContext context) {        if("test".equals((String)value)){            return true;        }        return false;    }    @Override    public Class<? extends Annotation> annotationType() {        return null;    }}

    实体类中使用

    public class User2 {    @NotEmpty(message = "ID不能为空")    @NotBlank(message = "ID不能为空哟")    //自定义校验注解-校验id是否为test    @MyFormValidator(value = "abc",message = "dd")    private String id;    @Min(value = 18)    @Max(value = 30)    private Integer age;    @NotEmpty(message = "昵称不能为空")    @NotBlank(message = "昵称不能为空哟")    @JsonProperty("nickname") //  当前端属性为nick后台接收对象的属性为nickName时可以用@JsonProperty来保持一致

    测试代码:

    @RequestMapping(value = "/demo6",produces = MediaType.TEXT_PLAIN_VALUE)    @ResponseBody    public String test6(@RequestBody @Valid User2 user , BindingResult bindingResult){        if(bindingResult.hasErrors()){            List<ObjectError> objectErrors = bindingResult.getAllErrors();            System.out.println(objectErrors.toString());            for(ObjectError objectError: objectErrors){                System.out.println("objectError = " + objectError.getObjectName());                System.out.println("objectError = " + objectError.getDefaultMessage());                System.out.println("objectError = " + objectError.getCode());                System.out.println("objectError = " + objectError.getArguments());            }        }        String str =  user.toString();        return str;    }

    当请求参数ID不为test,objectErrors 中有该报错。

    关于“SpringBoot常见get/post请求参数处理的方法”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“SpringBoot常见get/post请求参数处理的方法”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

    --结束END--

    本文标题: SpringBoot常见get/post请求参数处理的方法

    本文链接: https://lsjlt.com/news/324691.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作