Spring中的Web层常用的对象参数自动接受的方式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_15061629/article/details/82824400

Spring中的常用的对象接受注解:

前端交互时遇到问题小结一下区别:

  • @RequestParam

是最常用的方式,发送的post(context-type="application/x-www-form-urlencodeed",其中这种方式都是浏览器默认的通用的方式,当然你提交的方式是可以修改的Context-Type的根式的,这种只能够接受一些简单的对象参数,例如单个的String demo,User user

     @RequestMapping(value = "demo",method = RequestMethod.POST)
    public void demo(Demo demoReq){
        log.info("demo");
    }

    @RequestMapping(value = "demo2",method = RequestMethod.POST)
    public void demo2(String code){
        log.info(code);
    }

其中Demo的对象中的只能为简单的类型的基础类型,不能嵌套对象或是List的集合类什么的复杂对象类型 

  • @RequestBody

(post提交方式为Context-type="application/json;charset=UTF-8"),这个主要重点,1.接受的时候不能有多个@Request

Body,只能通过一个对象去接受,2,请求的提交方式context-type类型,可以时json ,xml等(没有试过其他的)

 @RequestMapping(value = "getUserinfo",method = RequestMethod.POST)
    public void getUserInfoByID(@RequestBody DemoReq demoReq) {
        System.out.println(JSON.toJSON(demoReq));
        log.info("调用用户名调用接口");
        User userinfo = userRespository.queryUserById(1l);
        log.info("调用返回的接口: userInfo =[{}]", JSON.toJSON(userinfo));
    }

其中DemoReq:对象中嵌套list<Demo>Demo 对象中还可以嵌套对象

@Data
public class DemoReq {

    List<Demo> list;
}

其中有个前提时Spring配置中需要添加Spring的一个Mapping对象,还需要引入相应的jar包:

pom

<dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.7.4</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.7.4</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.7.4</version>
    </dependency>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">
    <!-- 1.配置jdbc文件 -->
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations" value="classpath:properties/config.properties"/>
    </bean>

    <!-- 2.扫描的包路径,这里不扫描被@Controller注解的类 --><!--使用<context:component-scan/> 可以不在配置<context:annotation-config/> -->
    <context:component-scan base-package="com.lks.demo">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <mvc:annotation-driven>
        <mvc:message-converters>
            <ref bean="stringHttpMessageConverter"/>
            <ref bean="mappingJackson2HttpMessageConverter"/>
        </mvc:message-converters>
    </mvc:annotation-driven>
    <bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter">
        <constructor-arg value="utf-8" index="0"></constructor-arg>
        <property name="supportedMediaTypes">
            <list>
                <value>text/plain;charset=UTF-8</value>
            </list>
        </property>
    </bean>

    <bean id="mappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
                <value>application/json;charset=UTF-8</value>
            </list>
        </property>
    </bean>
    <import resource="classpath*:spring/mybatis-config.xml"/>

</beans>

mappingJack2HttpMessageConverter类的方法注入到其中

  • @ParamVariabl

主要用于路径传参的方式,相当于在路径上占位符:

例如:Restful的方式,在get请求路径的修改

@RequestMapping(value = "/demo3/{code}/{demo}")
    public void demo4(@PathVariable(value = "code") String code, @PathVariable(value = "demo") String demo) {
        log.info(code);
    }

使用的时机

application/x-www-form-urlencoded application/json ,application/xml multipart/form-data 单个参数 对象  
@PathVariable GET、POST(并没有什么意义) GET、POST(并没有什么意义) GET、POST(并没有什么意义)    
           
@RequestHeader GET、POST GET、POST GET、POST    
@CookieValue GET、POST GET、POST GET、POST    
@RequestParam GET、POST       ——        ——

    √

    ——
@RequestBody GET、POST GET、POST        ——   ——

 √

@ModelAttribute GET、POST       ——        ——

  ——

 √

@SessionAttributes          
           

猜你喜欢

转载自blog.csdn.net/qq_15061629/article/details/82824400
今日推荐