SpringMVC访问Controller接⼝返回400BadRequest
问题:SpringMVC使⽤⾃定义类型接收参数时, form提交会返回400 Bad Request,controller接⼝⾥的⽅法没有得到调⽤。
@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">订单状态: </td>
<td>
<select name="order_status"autoWidth="true">
<option value="">全部</option>
<c:forEach items="${order_status_map}"var="temp">
<option value="${temp.key}" <c:if test="${temp.key == der_status}">selected="selected"</c:if>>${temp.value}</option>
</c:forEach>
</select>
</td>
<td align="right">订单号: </td>
<td>
<input type="text"name="order_no"id="order_no"onfocus="this.value=''"value="${der_no}"/>
</td>
</tr>
<tr>
<td width="80"align="right">创建时间: </td>
<td><input type="text"class="date"name="createTimeStart"value="${ateTimeStart}"/></td>
<td align="center"> ⾄ </td>
<td><input type="text"class="date"name="createTimeEnd"value="${ateTimeEnd}"/></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是可以访问的并查询出数据的,我⼀开始以为是get⽅法能访问,post不能访问,后来发现,get使⽤Context-Type为application/x-www-form-urlencoded时也会访问不了,post使⽤使⽤application/json也能访问。
所以,这就需要修改form⾥的enctype属性为application/json,但是enctype属性只⽀持下⾯表格三种,
HTML form 标签的 enctype 属性
springmvc常用标签
值描述
application/x-www-form-urlencoded在发送前编码所有字符(默认)
multipart/form-data不对字符编码。在使⽤包含⽂件上传控件的表单时,必须使⽤该值。
值描述
text/plain空格转换为 “+” 加号,但不对特殊字符编码。
我试了下,text/plain和application/json具有同样的效果。
虽然在form⾥加上enctype=”text/plain”可以解决接⼝返回400BadRequest的问题,但是有新的问题出现:接⼝的参数Order param 接受不到post提交的值,但是将参数直接拼接在url,Order param则可以接收到值,Order param

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。