Java 客户端发送的请求在语法上不正确。在@manytone关系中,冬眠,春天
这是我在StackOverflow上的第一篇文章。对不起我的英语。我在项目SpringMVC和Hibernate中添加员工时遇到问题。我在tomcat 7.047上运行它。我认为问题在于JSP或Hibernate数据库映射。当我以同样的方式添加一个部门时。 数据库中的Oddzial和Pracownik关系: Oddzial[或英语部门]1:n Pracownik[员工] 错误输出: HTTP状态400- 类型状态报告 消息 说明客户端发送的请求在语法上不正确 我的员工[Pracownik]类别:Java 客户端发送的请求在语法上不正确。在@manytone关系中,冬眠,春天,java,spring,hibernate,spring-mvc,Java,Spring,Hibernate,Spring Mvc,这是我在StackOverflow上的第一篇文章。对不起我的英语。我在项目SpringMVC和Hibernate中添加员工时遇到问题。我在tomcat 7.047上运行它。我认为问题在于JSP或Hibernate数据库映射。当我以同样的方式添加一个部门时。 数据库中的Oddzial和Pracownik关系: Oddzial[或英语部门]1:n Pracownik[员工] 错误输出: 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
}
我的oddzial[系]班:
@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
}
我的雇员是财务总监
@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;
}
您的表单包含以下元素
<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);
List oddzialList=oddzialService.getOddzialy();
ModelAndView ModelAndView=新的ModelAndView(“添加pracownik表单”);
addObject(“pracownik”,新的pracownik());
addObject(“oddzialy”,oddzialList);
这将为oddzilist
列表中的每个对象创建一个html元素。value
属性的值将来自Oddzial
类的toString()
方法。无论该值是什么,除非您有一个转换器
将toString()
的返回值转换为类型为Oddzial
的对象,否则Spring本身将无法进行转换,因此会给您一个错误的请求
您有两个选择:
实现并注册一个自定义的org.springframework.core.convert.converter.converter
来进行转换
将
更改为包含常规
元素的c:forEach>
,这些元素包含Oddzial
对象的id。在控制器中,使用提交的ID查找适当的Oddzial
对象,并在将其提交到服务之前将其设置在Pracownik
对象上
该问题与映射等无关。这意味着随请求发送的数据无法转换为处理程序方法所期望的任何内容。我猜凶手是addingPracownik?在这种情况下,请检查您的请求负载是否可以转换为Pracownik实例。AddingPracownik方法在我单击“提交”时甚至不会启动。显示adres_zamieszkania
和oddzial_id
。公共字符串getAdres_zamieszkania(){return adres_zamieszkania;}public void setAdres zamieszkania(字符串adres_zamieszkania){this.adres_zamieszkania=adres_zamieszkania;}public Oddzial getOddzial_id(){return Oddzial_id;}public void setOddzial_id(Oddzial Oddzial_id){this.Oddzial_id=Oddzial_id;}您可以编辑您的问题并将其添加到那里。谢谢您的回答。我使用了2个版本的解决方案,效果很好!谢谢!
<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);