Spring中的Web層常用的物件引數自動接受的方式
阿新 • • 發佈:2019-01-03
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 |