使用SpringMVC訪問Controller接口返回400BadRequest
訪問Controller返回400BadRequest
問題
SpringMVC使用自定義類型接收參數(shù)時(shí), form提交會(huì)返回400 Bad Request,controller接口里的方法沒有得到調(diào)用。
@RequestMapping(value = "/list.do", method = {RequestMethod.GET , RequestMethod.POST}) ? ? public String list(Order param, HttpServletRequest request) { ? ? ? ? logger.info(JSONObject.fromObject(param).toString()); ? ? ? ? Integer count = orderService.findCount(param); ? ? ? ? logger.info(count); ? ? ? ? param.setRows(count); ? ? ? ? List<Order> result = orderService.findByPage(param); ? ? ? ? logger.info(JSONArray.fromObject(result).toString()); ? ? ? ? request.setAttribute("param", param); ? ? ? ? request.setAttribute("result", result); ? ? ? ? return "order/list"; ? ? }
? ? <form action="<%=basePath%>order/list.do" id="myform" method="post" > ? ? ? ? <input type="hidden" name="currentPage" value="${param.currentPage}"/> ? ? ? ? <table> ? ? ? ? ? ? <tr> ? ? ? ? ? ? ? ? <td width="80" align="right">訂單狀態(tài): </td> ? ? ? ? ? ? ? ? <td> ? ? ? ? ? ? ? ? ? ? <select name="order_status" autoWidth="true" style="width:120px;"> ? ? ? ? ? ? ? ? ? ? ? ? <option value="">全部</option> ? ? ? ? ? ? ? ? ? ? ? ? <c:forEach items="${order_status_map}" var="temp"> ? ? ? ? ? ? ? ? ? ? ? ? ? ? <option value="${temp.key}" <c:if test="${temp.key == param.order_status}">selected="selected"</c:if>>${temp.value}</option> ? ? ? ? ? ? ? ? ? ? ? ? </c:forEach> ? ? ? ? ? ? ? ? ? ? </select> ? ? ? ? ? ? ? ? </td> ? ? ? ? ? ? ? ? <td align="right">訂單號(hào): </td> ? ? ? ? ? ? ? ? <td> ? ? ? ? ? ? ? ? ? ? <input type="text" name="order_no" id="order_no" onfocus="this.value=''" value="${param.order_no}" style="width:140px;"/> ? ? ? ? ? ? ? ? </td> ? ? ? ? ? ? </tr> ? ? ? ? ? ? <tr> ? ? ? ? ? ? ? ? <td width="80" align="right">創(chuàng)建時(shí)間: </td> ? ? ? ? ? ? ? ? <td><input type="text" class="date" name="createTimeStart" value="${param.createTimeStart}" style="width:120px;"/></td> ? ? ? ? ? ? ? ? <td align="center"> 至 </td> ? ? ? ? ? ? ? ? <td><input type="text" class="date" name="createTimeEnd" ?value="${param.createTimeEnd}" style="width:120px;"/></td> ? ? ? ? ? ? ? ? <td><button><span class="icon_find">查詢</span></button></td> ? ? ? ? ? ? ? ? <td><button onclick="add();return false;"><span class="icon_add">添加</span></button></td> ? ? ? ? ? ? </tr> ? ? ? ? </table> ? ? </form>
直接在瀏覽器地址欄輸入<%=basePath%>order/list.do是可以訪問的并查詢出數(shù)據(jù)的,我一開始以為是get方法能訪問,post不能訪問,后來發(fā)現(xiàn),get使用Context-Type為application/x-www-form-urlencoded時(shí)也會(huì)訪問不了,post使用使用application/json也能訪問。
所以,這就需要修改form里的enctype屬性為application/json,但是enctype屬性只支持下面表格三種,
HTML form 標(biāo)簽的 enctype 屬性
值 | 描述 |
---|---|
application/x-www-form-urlencoded | 在發(fā)送前編碼所有字符(默認(rèn)) |
multipart/form-data | 不對(duì)字符編碼。在使用包含文件上傳控件的表單時(shí),必須使用該值。 |
text/plain | 空格轉(zhuǎn)換為 “+” 加號(hào),但不對(duì)特殊字符編碼。 |
我試了下,text/plain和application/json具有同樣的效果。
雖然在form里加上enctype=”text/plain”可以解決接口返回400BadRequest的問題,但是有新的問題出現(xiàn):接口的參數(shù)Order param接受不到post提交的值,但是將參數(shù)直接拼接在url,Order param則可以接收到值,Order param
SpringMVC遇到的Http400BadRequest總結(jié)
在搭建SpringMVC環(huán)境,在使用中遇到了多次Bad Request的連接
下面來總結(jié)下
1.參數(shù)類型不對(duì),如后臺(tái)實(shí)體類的屬性為int,但傳來的參數(shù)為字符串
2.因?yàn)槲业拇中?,本來是要通過Ajax獲得一個(gè)json串,但是后臺(tái)的方法在返回值類型前沒有加@RequestBody注解
3.傳遞的參數(shù)為日期,spring不知道該以什么格式轉(zhuǎn)換為Date類型,解決辦法為在實(shí)體類的日期屬性上加上@DateTimeFormat(pattern="yyyy-MM-dd")注解即可
4.剛遇到的問題,排查了好久終于知道是什么原因了,實(shí)體類中有int類型的屬性,但是前臺(tái)傳參時(shí)傳遞的樣子是這樣的"age=",并沒有給一個(gè)準(zhǔn)確的數(shù)字(age=18),所以導(dǎo)致Spring在對(duì)int型屬性進(jìn)行賦值時(shí)無法正確賦值
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java 定時(shí)器(Timer)及線程池里使用定時(shí)器實(shí)例代碼
這篇文章主要介紹了Java 定時(shí)器(Timer)及線程池里使用定時(shí)器實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2016-12-12java常用工具類 XML工具類、數(shù)據(jù)驗(yàn)證工具類
這篇文章主要為大家詳細(xì)介紹了java常用工具類,包括XML工具類、數(shù)據(jù)驗(yàn)證工具類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05SpringCloud全局過慮器GlobalFilter的用法小結(jié)
這篇文章主要介紹了SpringCloud全局過慮器GlobalFilter的使用,全局過慮器使用非常廣泛,比如驗(yàn)證是否登錄,全局性的處理,黑名單或白名單的校驗(yàn)等,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07Java+mysql本地圖片上傳數(shù)據(jù)庫及下載示例
本篇文章主要介紹了Java+mysql本地圖片上傳數(shù)據(jù)庫及下載示例,具有一定的參加價(jià)值,有興趣的可以了解一下。2017-01-01springboot中如何使用openfeign進(jìn)行接口調(diào)用
這篇文章主要介紹了springboot中如何使用openfeign進(jìn)行接口調(diào)用問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07mybatis if test 不為空字符串且不為null的問題
這篇文章主要介紹了mybatis if test 不為空字符串且不為null的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03Sentinel熱點(diǎn)key限流的實(shí)現(xiàn)詳解
這篇文章主要介紹了Sentinel熱點(diǎn)key限流的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08