良い午後を新しいエンティティレコードを作成するときに、クライアントから送信されたリクエストが文法的に間違っていた、春MVC:
私は春のMVCへの初心者です。私は私のプロジェクトを実行している間、次のエラーで立ち往生しています。 "クライアントが送信したリクエストは構文的に間違っていました。
私のプロジェクトには、ManyToOne関係を持つチームと国という2つのエンティティがあります。どちらのエンティティも、mysqlデータベースで作成されたテーブルをマップします。
私はチームエンティティのみでプロジェクトを開始し、新しいチームを作成するためにクラス(DAO、コントローラ、サービスなど)とJSPを作成しました。
ここで、両方のエンティティを関連付けるCountryクラスを作成しました。新しいチームの国を選択するために、「add-team-form.jsp」にドロップダウンリストを追加しました。このページは正しく表示されます(すべての国がドロップダウンリストに表示されます)。ただし、「送信」をクリックして新しいチームを作成すると、「クライアントが送信したリクエストは構文的に正しくありません」というエラーが表示されます。
エラーを特定するために教えてください。私はそれが "add-team-form.jsp"にあると推測しています。
1 - エンティティチーム:
@Entity
@Table(name="teams")
public class Team implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "name", length = 40, nullable = false)
private String name;
@Column(name = "rating", length = 6, nullable = false)
private Integer rating;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "id_country", nullable = false)
private Country country;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getRating() {
return rating;
}
public void setRating(Integer rating) {
this.rating = rating;
}
public Country getCountry() {
return country;
}
public void setCountry(Country country) {
this.country = country;
}
}
2 - エンティティ国:
@Entity
@Table(name = "countries")
public class Country implements Serializable{
@Id
@Column(name= "id_country", length = 6)
private String idCountry;
@Column(name = "name", length = 255, nullable = false)
private String name;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "country")
private List<Team> teams;
public String getIdCountry() {
return idCountry;
}
public void setIdCountry(String idCountry) {
this.idCountry = idCountry;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
マイチームDAO
@Repository
public class TeamDAOImpl implements TeamDAO {
@Autowired
private SessionFactory sessionFactory;
private Session getCurrentSession() {
return sessionFactory.getCurrentSession();
}
@Override
public void addTeam(Team team) {
getCurrentSession().save(team);
}
}
マイチームサービス
@Service
@Transactional
public class TeamServiceImpl implements TeamService {
@Autowired
private TeamDAO teamDAO;
public void addTeam(Team team) {
teamDAO.addTeam(team);
}
私のチームコントローラ
@Controller
@RequestMapping(value="/team")
public class TeamController {
@Autowired
private TeamService teamService;
@Autowired
private FilterService filterService;
@RequestMapping(value="/add", method=RequestMethod.GET)
public ModelAndView addTeamPage() {
ModelAndView modelAndView = new ModelAndView("add-team-form");
modelAndView.addObject("team", new Team());
return modelAndView;
}
@RequestMapping(value="/add", method=RequestMethod.POST)
public ModelAndView addingTeam(@ModelAttribute Team team) {
ModelAndView modelAndView = new ModelAndView("home");
teamService.addTeam(team);
String message = "Team was successfully added.";
modelAndView.addObject("message", message);
return modelAndView;
}
@ModelAttribute("countryList")
public Map<String, String> getCountryList(){
Map<String, String> countryList = filterService.getCountries();
return countryList;
}
...
}
私の「アドオンチームform.jsp」
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<?xml version="1.0" encoding="ISO-8859-1" ?>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Add team page</title>
</head>
<body>
<h1>Add team page</h1>
<form:form method="POST"
modelAttribute="team"
action="${pageContext.request.contextPath}/team/add.html">
<table>
<tbody>
<tr>
<td>Name:</td>
<td><form:input path="name" /></td>
</tr>
<tr>
<td>Rating:</td>
<td><form:input path="rating" /></td>
</tr>
<tr>
<td><label>Country</label></td>
<td>
<form:select path="country.idCountry">
<form:options items="${countryList}" />
</form:select>
</td>
<tr>
<td><input type="submit" value="Add" /></td>
<td></td>
</tr>
</tbody>
</table>
</form:form>
</body>
</html>
あり日食のコンソールに表示エラーがありませんが、ここでは、ブラウザからの受信エラーイムです:パラメータが見つからないか、別の形式であると予想されるtype.Check値に変換することができませんされている場合は、一般的に受信されているエラーが発生した
HTTP Status 400 -
type Status report
message
description The request sent by the client was syntactically incorrect.
Apache Tomcat/7.0.47
にありますが、あなたは私たちに、完全なスタックトレースを表示することができますか? –
@TanmayDelhikar私は、ブラウザから受信しているエラーで質問を更新しました。エクリプスのコンソールにエラーが表示されません。 – MiguelDuque
ロギングをDEBUGに設定します。 Bootを使用している場合は、[how](https://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html)を参照してください。ブラウザにエラーが発生した場合は、サーバー側にも印刷されます。 –