2017-04-13 16 views
0

私はこの問題に多くの時間を費やしましたが、解決できません。助けてください! JSPからフォームを送信すると、このエラーが発生します。 マイコード:HTTPステータス400 - クライアントから送信された要求の構文が正しくありません。 Spring MVC

<form action="/albums/add" method="post"> 
<%--<div><input type="file"></div>--%> 
<div>Name: <input type="text" name="name" placeholder="Name"></div> 
<div>Year: <input type="text" name="year" placeholder="Release year"></div> 
<div> 
    <select name="singer" id="singer"> 
    <c:forEach items="${singers}" var="s"> 
     <option value="${s.id}">${s.name}</option> 
    </c:forEach> 
</select> 
</div> 
<input type="submit" > 

そして、私のコントローラのコード:

@RequestMapping(value = "", method = RequestMethod.GET) 
public String albumsGET(ModelMap map) { 
    List<Album> albums = albumDAO.getAllAlbums(); 
    map.addAttribute("albums", albums); 
    return "forward:/Albums.jsp"; 
} 

@RequestMapping(value = "/add", method = RequestMethod.GET) 
public String albumsAddGET(ModelMap map) { 
    map.put("singers", singerDAO.getAllSingers()); 
    return "forward:/WEB-INF/Pages/Album/AddAlbum.jsp"; 
} 

@RequestMapping(value = "/add", method = RequestMethod.POST) 
public String albumsPOST(@ModelAttribute Album album, HttpServletRequest req) { 

     Singer s = singerDAO.getSingerById(Long.valueOf(req.getParameter("singer"))); 
     s.getAlbumList().add(album); 
     album.setSinger(s); 
     singerDAO.updateSinger(s); 
    return "redirect:/albums"; 
} 

}

+0

あなた 'Album'と' Singer'エンティティのチェックは、それが適切にフォームと一致している場合。 –

答えて

1

あなたは、春が提供するカスタム例外をスロー@ControllerAdviceアノテーションでクラスを作成することができ別のHTTPステータスコードでカスタム例外をスローする

0

HTTP戻りコード400の@ModelAttributeのパラメータマッピングエラーです。

このエラーが発生する理由はいくつかあります。

  1. Albumオブジェクトのパラメータ名はありません。
  2. NULLマッピング値Albumがあります。

したがって、${singers}の項目を確認できる場合は、適切に置換された値を確認する必要があります。

次に、Albumオブジェクトでは、getter/setterメソッドをチェックする必要があります。私は(VOなど)Objectのデフォルト値を設定することにその問題を解決している可能性が

関連する問題