今天做Spring mvc REST風格的crud時,在springmvc 表單標簽<form:select> 遇到了400的問題
這是佟剛的視頻:https://www.bilibili.com/video/av14907450/?p=31
這個是解決方案 ,但是原因沒說清楚: https://www.cnblogs.com/yjq520/p/6755370.html
錯誤代碼:
HTTP Status 400 -
type Status report
message
description The request sent by the client was syntactically incorrect.
Apache Tomcat/7.0.47
原因:
400 請求出錯
由於語法格式有誤,服務器無法理解此請求。不作修改,客戶程序就無法重復此請求。
在 SpringMVC 中的 Action 中處理前台 ajax 請求傳過來的 json 數據直接轉成對應的實體類時出錯:
400 Bad Request,后台也不報錯,400指的的是請求無效(請求有語法問題或者不能滿足請求)。
解決辦法:
檢查實體類的 javabean 里邊的類型是否和 springmvc form 的 form 表單名是否一致。
我的錯誤原因是兩個關聯的實體類導致在 form 表單中 name 名稱不一致:
Employee.java
private Integer id; private String lastName; private String email; private int gender; private Department department; //無參構造方法以省略 //有參構造方法以省略 //setter 和 getter 方法以省略
Department.java
private Integer id; private String departmentName; //無參構造方法以省略 //有參構造方法以省略 //setter 和 getter 方法以省略
form 表單:
<!-- 可以通過 modelAttribute 屬性指定綁定的模型屬性, 若沒有指定該屬性,則默認從 request 域對象中讀取 command 的表單 bean, 如果該屬性值也不存在,則會發生錯誤 --> <form:form action="emp-save" method="post" modelAttribute="employee"> <!-- path 屬性對應 HTML 表單標簽的 name 屬性 --> LastName:<form:input path="lastName"/> <br> Email:<form:input path="email"/> <br> Gender:<form:radiobuttons path="gender" items="${genders}"/> <br> Department:<form:select path="department" items="${dapartments}" itemLabel="departmentName" itemValue="id"></form:select><br> <input type="submit" value="Submit"> </form:form>
把 path="department" 改為 path="department.id"
原因:指明itemValue的這個id 時 employee.department.id 而不能是 employee.department
path要正確配置,支持級聯屬性