@RequestBody与@RequestParam

@RequestBody与@RequestParam

  • @RequestBody
    • 了解注解
    • 使用注解
  • @RequestParam
    • 了解注解
    • 使用注解
  • 总结

@RequestBody

1、注解@RequestBody接收的参数是来自请求体中的,一般用于处理非Content-Type:application/x-www-form-urlencoded编码格式的数据,一般用于处理:application/json、application/xml等类型数据
2、@RequestBody不能在同一个方法中出现多次
3、@RequestBody,接收的参数是来自请求体中的,一般对应使用的请求是POST请求
4、GET请求中,因为没有HttpEntity,所以@RequestBody并不适用。
5、POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,SpringMVC通过使用HandlerAdapter 配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到相应的bean上。

了解注解

package org.springframework.web.bind.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestBody {
    boolean required() default true;
}

使用注解

@RequestBody与@RequestParam_第1张图片
@RequestBody与@RequestParam_第2张图片

@RequestParam

1、⽤来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。(Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)

了解注解

required 表示是否必须,默认为 true,必须。
defaultValue 可设置请求参数的默认值。
value 为接收url的参数名(相当于key值)。

package org.springframework.web.bind.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.core.annotation.AliasFor;

@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestParam {
    @AliasFor("name")
    String value() default "";

    @AliasFor("value")
    String name() default "";

    boolean required() default true;

    String defaultValue() default "\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n";
}

使用注解

controller
@RequestBody与@RequestParam_第3张图片
请求该接口相当于:

在这里插入图片描述

总结

1.Post请求接收@RequestBody修饰的参数和@RequestParam修饰的参数,而Get请求则只能接收@RequestParam修饰的参数。
2.如果前端传的是Json类型的对象,后台就要使用@RequestBody修饰的实体类接收,如果是单个属性就使用@RequestParam修饰的变量或实体类。
3、@RequestBody和@ResquestParam()可以在同一个接口中一起用,@RequestBody最多只能有一个,而@ResquestParam()可以有多个

你可能感兴趣的:(java)