![](/img/trans.png)
[英]HTTP Status 400 - The request sent by the client was syntactically incorrect. - within a Spring MVC web app using Hibernate
[英]The request sent by the client was syntactically incorrect. in @ManyToOne relation Hibernate, Spring
这是我在StackOverflow上的第一篇文章。 对不起我的英语不好。 我在Spring MVC和Hibernate项目中添加员工时遇到问题。 我在tomcat 7.047上运行它。 我认为问题出在JSP或Hibernate数据库映射。 当我以相同的方式添加部门时。 数据库中的Oddzial和Pracownik关系:Oddzial [或英语的部门] 1:n Pracownik [Employee]
错误输出:
类型状态报告消息描述客户端发送的请求在语法上不正确。
我的员工[Pracownik]课程:
@Entity
@Table(name = "pracownicy")
@Inheritance(strategy=InheritanceType.JOINED)
public class Pracownik implements Serializable {
private static final long serialVersionUID = -2556993070168215685L;
@Id
@GeneratedValue
private Integer pracownik_id;
@ManyToOne(cascade = {CascadeType.MERGE})
@JoinColumn(name="oddzial_id", nullable = false)
private Oddzial oddzial_id;
private String imie;
private String nazwisko;
private String adres_zamieszkania;
private String miasto;
@Column(columnDefinition = "enum('Pelny','Pol')")
@Enumerated(EnumType.STRING)
private Etat etat;
private String stanowisko;
private Double pensja;
@ManyToOne(cascade = {CascadeType.MERGE})
@JoinColumn(name="kierownik_id", nullable = true)
private Pracownik kierownik_id;
//getters and setters generated by eclipse
}
我的奇数[部门]班:
@Entity
@Table(name="oddzial")
public class Oddzial implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Integer oddzial_id;
private String miasto;
private String ulica;
//getters and setters generated by eclipse
}
我的EmployeeController
@Controller
@RequestMapping(value="/pracownik")
public class PracownikController {
@Autowired
private PracownikService pracownikService;
@Autowired
private OddzialService oddzialService;
@RequestMapping(value="/add", method=RequestMethod.GET)
public ModelAndView addPracownikPage() {
List<Oddzial> oddzialList = oddzialService.getOddzialy();
ModelAndView modelAndView = new ModelAndView("add-pracownik-form");
modelAndView.addObject("pracownik", new Pracownik());
modelAndView.addObject("oddzialy", oddzialList);
return modelAndView;
}
@RequestMapping(value="/add", method=RequestMethod.POST)
public ModelAndView addingPracownik(@ModelAttribute Pracownik pracownik, HttpServletRequest request) {
ModelAndView modelAndView = new ModelAndView("home");
pracownikService.addPracownik(pracownik);
String message = "Pracownik was successfully added.";
System.out.println(message);
modelAndView.addObject("message", message);
return modelAndView;
}
我的JSP-员工表的加法器:我曾经使用和仍然相同。
<form:form method="POST" commandName="pracownik" action="${pageContext.request.contextPath}/pracownik/add.html">
<table>
<tbody>
<tr>
<td>Oddzial ID:</td>
<td><form:radiobuttons path="oddzial_id" items='${oddzialy}'/></td>
</tr>
<tr>
<td>Imię:</td>
<td><form:input path="imie" /></td>
</tr>
<tr>
<td>Nazwisko:</td>
<td><form:input path="nazwisko" /></td>
</tr>
<tr>
<td>Pensja:</td>
<td><form:input path="pensja" /></td>
</tr>
<tr>
<td>Stanowisko:</td>
<td><form:input path="stanowisko" /></td>
</tr>
<tr>
<td>Adres:</td>
<td><form:input path="adres_zamieszkania" /></td>
</tr>
<tr>
<td><input type="submit" value="Add" /></td>
<td></td>
</tr>
</tbody>
</table>
</form:form>
如果您需要更多信息,请写信。 预先感谢您的帮助。
Oddzial和adres_Zamieszkania的Getter和Setter。
public Oddzial getOddzial_id() {
return oddzial_id;
}
public void setOddzial_id(Oddzial oddzial_id) {
this.oddzial_id = oddzial_id;
}
public String getAdres_zamieszkania() {
return adres_zamieszkania;
}
public void setAdres_zamieszkania(String adres_zamieszkania) {
this.adres_zamieszkania = adres_zamieszkania;
}
您的表单具有以下元素
<form:radiobuttons path="oddzial_id" items='${oddzialy}'/>
从中填充
List<Oddzial> oddzialList = oddzialService.getOddzialy();
ModelAndView modelAndView = new ModelAndView("add-pracownik-form");
modelAndView.addObject("pracownik", new Pracownik());
modelAndView.addObject("oddzialy", oddzialList);
这将为oddziaList
List
中的每个对象创建一个html <form>
<input>
元素。 value
属性的值将来自Oddzial
类的toString()
方法。 无论该值是多少,除非您有一个Converter
可以将toString()
的返回值Converter
为Oddzial
类型的对象, Oddzial
Spring本身将无法进行转换,因此将给您400 Bad Request。
您有两种选择:
org.springframework.core.convert.converter.Converter
进行转换。 <form:radiobuttons>
更改为c:forEach>
其中包含常规的<input type="radio">
元素,这些元素包含Oddzial
对象的ID。 在您的控制器中,使用该提交的ID查找适当的Oddzial
对象,然后将其设置在Pracownik
对象上,然后再将其提交给您的服务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.