解決@RequestBody接收json對象報錯415的問題
@RequestBody接收json對象報錯415
前端請求:
$.ajax({
url: basePath() + "/index/login.do",
type : "post",
data: JSON.stringify(form),
dataType : "json",
contentType : "application/json;charset=utf8",
success: function (data) {
console.log(data);
},
error: function () {
}
});
后端接收:
@ResponseBody
@RequestMapping(value = "/login",method = RequestMethod.POST,produces = "application/json;charset=utf8")
public JSONObject login(@RequestBody LoginVo loginVo){
JSONObject result = new JSONObject();
UsernamePasswordToken token = new UsernamePasswordToken(loginVo.getUsername(),loginVo.getPassword());
System.out.println(loginVo.isRememberMe());
Subject subject = SecurityUtils.getSubject();
subject.login(token);
if (subject.isAuthenticated()){
result.put("result",true);
}else{
result.put("result",false);
}
return result;
}
前端ajax請求,后端使用@RequestBody接收,報出415請求數(shù)據(jù)格式錯誤
錯誤原因:
springMVC無法讀取ajax設(shè)置好的dataType并以對應(yīng)的方式處理請求頭,進(jìn)而無法處理json數(shù)據(jù)
解決辦法:
在maven中引入Jackson相關(guān)jar包,并在springMVC的xml中引入相關(guān)配置,maven和springMVC的相關(guān)代碼如下:
maven:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.6</version>
</dependency>
springMVC:
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<!-- 設(shè)置返回字符串編碼 -->
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name = "supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
<!-- json轉(zhuǎn)換器 -->
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</list>
</property>
</bean>
后端使用@RequestBody接收前端傳來的數(shù)據(jù)
踩坑①
@RequestBody接收json字符串,只能使用post的提交方式
前端直接復(fù)制了相似功能頁面的js,該頁面是使用的get的提交方式
但前端報錯500,后端報錯提示
2019-09-12 09:17:43.088 ERROR GlobalExceptionHandler : An exception occurs within the system : Required String parameter ‘xxx' is not present
踩坑②
后將.get(URL,data,callback)修改為.post(URL,data,callback);
$.post(URL,data,callback);
必需的 URL 參數(shù)規(guī)定您希望請求的 URL。
可選的 data 參數(shù)規(guī)定連同請求發(fā)送的數(shù)據(jù)。
可選的 callback 參數(shù)是請求成功后所執(zhí)行的函數(shù)名
但前端繼續(xù)報錯500,后端報錯提示
2019-09-12 09:23:15.409 ERROR GlobalExceptionHandler : An exception occurs within the system : Content type ‘a(chǎn)pplication/x-www-form-urlencoded;charset=UTF-8' not supported
踩坑③
后端提示不支持Content type 為'application/x-www-form-urlencoded;charset=UTF-8'的格式,百度查了一下.post(URL,data,callback)只是預(yù)配置.ajax調(diào)用的快捷方式,并不能修改contentType的類型
所以將$.post方法修改為了&.ajax方法
設(shè)置
type: “post”, url: ctx + url, data: JSON.stringify(allData), dataType: “json”, contentType:“application/json;charset=utf-8”,
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java中的StringTokenizer實現(xiàn)字符串切割詳解
這篇文章主要介紹了Java中的StringTokenizer實現(xiàn)字符串切割詳解,java.util工具包提供了字符串切割的工具類StringTokenizer,Spring等常見框架的字符串工具類(如Spring的StringUtils),需要的朋友可以參考下2024-01-01
Java 獲取兩個List的交集和差集,以及應(yīng)用場景操作
這篇文章主要介紹了Java 獲取兩個List的交集和差集,以及應(yīng)用場景操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
SpringBoot如何接收前端傳來的json數(shù)據(jù)
這篇文章主要介紹了SpringBoot如何接收前端傳來的json數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04
Java.lang.Long.parseLong()方法詳解及示例
這個java.lang.Long.parseLong(String s) 方法解析字符串參數(shù)s作為有符號十進(jìn)制長,下面這篇文章主要給大家介紹了關(guān)于Java.lang.Long.parseLong()方法詳解及示例的相關(guān)資料,需要的朋友可以參考下2023-01-01

