こんにちは、私はSpringでWebサービスを始めているので、Spring + JSON + Hibernateで小さなアプリケーションを開発しようとしています。 HTTP-POSTに問題があります。メソッドを作成しました:
@RequestMapping(value="/workers/addNewWorker", method = RequestMethod.POST, produces = "application/json", consumes = "application/json")
@ResponseBody
public String addNewWorker(@RequestBody Test test) throws Exception {
String name = test.name;
return name;
}
そして、私のモデルのテストは次のようになります:
public class Test implements Serializable {
private static final long serialVersionUID = -1764970284520387975L;
public String name;
public Test() {
}
}
POSTMANで、単にJSON {"name": "testName"}を送信していますが、常にエラーが発生します。
The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.
Jacksonライブラリーをインポートしました。 GETメソッドは正常に機能します。何が間違っているのかわかりません。私はどんな提案にも感謝しています。
使用してJSONオブジェクトをJSON文字列に変換します
JSON.stringify({"name": "testName"})
または手動で。 @ RequestBodyはjson文字列を期待しています jsonオブジェクトの代わりに。
注:stringify関数は、いくつかのIEバージョン、firefoxで動作する問題があります
POST request。processData:falseプロパティがajaxリクエストに必要です。
$.ajax({
url:urlName,
type:"POST",
contentType: "application/json; charset=utf-8",
data: jsonString, //Stringified Json Object
async: false, //Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation
cache: false, //This will force requested pages not to be cached by the browser
processData:false, //To avoid making query String instead of JSON
success: function(resposeJsonObject){
// Success Action
}
});
コントローラー
@RequestMapping(value = urlPattern , method = RequestMethod.POST)
public @ResponseBody Test addNewWorker(@RequestBody Test jsonString) {
//do business logic
return test;
}
@RequestBody
-JsonオブジェクトをJavaに変換する
@ResponseBody
-JavaオブジェクトをJSONに変換する
代わりにapplication/*を使用してみてください。 JSON.maybeJson()を使用して、コントローラーのデータ構造を確認します。
モデルTest
クラスで定義されたすべてのフィールドのゲッターとセッターを含める必要があります-
public class Test implements Serializable {
private static final long serialVersionUID = -1764970284520387975L;
public String name;
public Test() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Jsonをhttp要求および応答として使用する場合は、次のことを実行します。したがって、[context] .xmlを変更する必要があります
<!-- Configure to plugin JSON as request and response in method handler -->
<beans:bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<beans:property name="messageConverters">
<beans:list>
<beans:ref bean="jsonMessageConverter"/>
</beans:list>
</beans:property>
</beans:bean>
<!-- Configure bean to convert JSON to POJO and vice versa -->
<beans:bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
</beans:bean>
ジャクソンAPIが起動してJSONをJava Beansに、またはその逆に変換するように、RequestMappingHandlerAdapter messageConvertersにMappingJackson2HttpMessageConverterをマッピングします。この構成により、応答。
また、コントローラー部分の小さなコードスニペットも提供しています。
@RequestMapping(value = EmpRestURIConstants.DUMMY_EMP, method = RequestMethod.GET)
public @ResponseBody Employee getDummyEmployee() {
logger.info("Start getDummyEmployee");
Employee emp = new Employee();
emp.setId(9999);
emp.setName("Dummy");
emp.setCreatedDate(new Date());
empData.put(9999, emp);
return emp;
}
したがって、上記のコードでは、empオブジェクトは応答としてjsonに直接変換されます。同じことがポストにも発生します。