运维开发网

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

运维开发网 https://www.qedev.com 2022-10-26 19:05 出处:网络
这篇文章主要给大家介绍了关于SpringBoot常见get/post请求参数处理、参数注解校验及参数自定义注解校验的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

这篇文章主要给大家介绍了关于SpringBoot常见get/post请求参数处理、参数注解校验及参数自定义注解校验的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下


spring boot 常见http get ,post请求参数处理

在定义Rest接口时,我们通常使用GET、POST、PUT和DELETE来添加、删除和检查数据。其中一些方法需要传递参数,后台开发人员必须对收到的参数进行验证,以保证程序的健壮性。

GET
一般用于查询数据,采用明文进行传输,一般用来获取一些无关用户信息的数据POST
一般用于插入数据PUT
一般用于数据更新DELETE
一般用于数据删除
一般都是进行逻辑删除(即:仅仅改变记录的状态,而并非真正的删除数据)

@ pathwaribale获取url中的数据

@RequestParam获取请求参数的值

@GetMapping组合注释是@ request mapping(method = request method . 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; }}

在浏览器中输入地址:

本地主机:8080/hello/100/hello

输出:

id:81姓名:你好


RequestParam 获取请求参数的值

获取url参数值。默认情况下,方法参数名称应该与url参数一致。

本地主机:8080/helloid=1000

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

输出:

编号:100

当url中有多个参数时,例如:

localhost:8080/hello id = 98 amp;ampname=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参数值并执行参数名。

本地主机:8080/hellouserId=1000

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

输出:

编号:100


注意

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

id:空

如果未输入id参数,将会报告以下错误:

白色错误页面错误


GET参数校验

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

具体代码如下:

本地主机:8080/你好

@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参数校验

普通支票票据


注意:

默认情况下,所有接收到的参数都是字符串类型。

一些注释只能用于字符串类型的属性。

@JsonProperty可以解决前端属性名和后端实体类属性名不一致的问题。

验证方法:

使用@RequestBody @Valid获取并验证JSON参数。

通过BindingResult获取验证结果。

BindingResult源代码:


提示01:使用BindingResult对象的hasErrors方法来确定是否有参数错误。

提示02:使用BindingResult对象的getFieldErrors方法获取所有有参数错误的属性。

提示03:使用error属性对象的getDefaultMessage获取错误消息。

@RequestMapping(value = "/demo5",produces = MediaType.TEXT_PLAIN_VALUE) @ResponseBody public String test5(@RequestBody @Valid User user , BindingResult bindingResult){ if(bindingResult.hasErrors()){ Listlt;ObjectErrorgt; 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; }

对应用户实体类别的代码:

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方法


自定义注解校验

1.定义检查注释。

代码如下:

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"; Classlt;gt;[] groups() default {}; Classlt; extends Payloadgt;[] payload() default {};}

2.定义约束检查。

import javax.validation.ConstraintValidator;import javax.validation.ConstraintValidatorContext;import java.lang.annotation.Annotation;public class MyFormValidatorClass implements ConstraintValidatorlt;MyFormValidator, Objectgt;, 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 Classlt; extends Annotationgt; annotationType() { return null; }}

3.在实体类中使用。

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来保持一致

4.测试代码:

@RequestMapping(value = "/demo6",produces = MediaType.TEXT_PLAIN_VALUE) @ResponseBody public String test6(@RequestBody @Valid User2 user , BindingResult bindingResult){ if(bindingResult.hasErrors()){ Listlt;ObjectErrorgt; 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中常见http get post请求参数处理的更多信息

0

上一篇:

没有了:下一篇

精彩评论

暂无评论...
验证码 换一张
取 消