ディスパッチャーサーブレットへのリクエストが何を試みても、HTTP 415エラーが返されます。リクエストでContent-Typeはapplication/jsonに設定されています。Spring MVC @RequestBodyは415エラーを返します
メッセージコンバータが要求をオブジェクトにマッピングしていないようです。
私はPOM内のすべてのジャクソンの依存関係を持っている:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson-databind-version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-jaxb-annotations</artifactId>
<version>2.4.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.7</version>
</dependency>
<dependency>
<groupId>org.apache.xbean</groupId>
<artifactId>xbean-spring</artifactId>
<version>3.7</version>
</dependency>
コントローラクラス:
@RequestMapping(value = "/login", method = RequestMethod.POST, headers = {"Accept=application/json"}, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public DriverLoginResponseDTO login(@RequestBody MyDTO dto)
{
System.out.println("login method hit!");
LoginResponseDTO resp = null;
try {
resp = loginService.processLogin(dto);
}
catch (Exception cde) {
resp = new LoginResponseDTO();
resp.setMessage("ERROR");
}
// Return response object
return resp;
} // login
私は、受け入れ消費し、無駄に@RequestMappingに生成追加しようとしました。
私は、メソッドのパラメータとしてのHttpServletRequestで正しいJSONレスポンスを取得することができます。
@RequestMapping(value = "/login3", method = RequestMethod.POST)
@ResponseBody
public DriverLoginResponseDTO login3(HttpServletRequest request)
{
String line;
StringBuilder sb = new StringBuilder();
InputStream is;
try {
is = request.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
while ((line = reader.readLine()) != null) {
sb.append(line).append("\n");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("login3 method hit!");
System.out.println("JSON string received: " + sb.toString());
LoginResponseDTO resp = null;
try {
resp = loginService.processLogin(new MyDTO());
}
catch (Exception cde) {
resp = new LoginResponseDTO();
resp.setMessage("ERROR");
}
// Return response object
return resp;
} // login
この1つは、System.outに書かれた正しいJSON文字列を示します。上記の最初の「ログイン」メソッドでJSONリクエストをRequestBodyオブジェクトにマッピングしているものがありますが、何が欠けているのか分かりません。
これが関連しているが、WebSphereは、以下のエラーを投げている場合、私は知らない。
SRVE8094W:WARNING:ヘッダーを設定することはできませんが。応答はすでにコミットされています
に代わり
headers = {"Accept=application/json"}
のconsumes = "application/json"
を設定してください。また、郵便配達員のようなレストクライアントでサービスを呼び出すこともできます。 – reosスパムがありません。あなたのAjaxリクエストコードが必要です。 – Byeon0gam
_ "これは正しいJSON文字列を示しています" _これは無関係です。重要なのはメディアの種類です。 – zeroflagL