繁体   English   中英

客户端发送的请求在语法上不正确。 在@ManyToOne关系中休眠,春季

[英]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]

错误输出:

HTTP状态400-

类型状态报告消息描述客户端发送的请求在语法上不正确。

我的员工[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()的返回值ConverterOddzial类型的对象, Oddzial Spring本身将无法进行转换,因此将给您400 Bad Request。

您有两种选择:

  1. 实现并注册一个自定义org.springframework.core.convert.converter.Converter进行转换。
  2. <form:radiobuttons>更改为c:forEach>其中包含常规的<input type="radio">元素,这些元素包含Oddzial对象的ID。 在您的控制器中,使用该提交的ID查找适当的Oddzial对象,然后将其设置在Pracownik对象上,然后再将其提交给您的服务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM