14

こんにちは、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;
}

そして、私のモデル Test は次のようになります。

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 メソッドは正常に動作します。何が間違っているのかわかりません。私はどんな提案にも感謝しています。

4

5 に答える 5

28

を使用してJSONオブジェクトをJSON文字列に変換します

JSON.stringify({"名前":"テスト名"})

または手動で。@RequestBodyは、json オブジェクトではなく json 文字列を想定しています。

注:一部の IE バージョンでは文字列化機能に問題がありますが、Firefox では動作します。

POST リクエストの ajax リクエストの構文を確認してください。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 に変換

于 2013-09-01T03:40:14.950 に答える
0

代わりに application/* を使用してみてください。JSON.maybeJson() を使用して、コントローラーのデータ構造を確認します。

于 2013-08-31T17:01:38.363 に答える
0

ここを参照

マッピングされたリクエストの消費可能なメディア タイプ。プライマリ マッピングを絞り込みます。

プロデューサーはプライマリ マッピングを絞り込むために使用されます。リクエストを送信すると、それに一致する正確なヘッダーを指定する必要があります。

于 2019-05-09T11:23:54.317 に答える
0

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>   

Jackson2HttpMessageConverter を RequestMappingHandlerAdapter messageConverters にマッピングして、Jackson API が起動し、JSON を Java Beans に、またはその逆に変換します。この構成により、リクエスト本文で JSON を使用し、レスポンスで JSON データを受け取ります。

コントローラー部分の小さなコード スニペットも提供しています。

    @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 に変換されます。投稿でも同じことが起こります。

于 2017-04-19T11:56:04.133 に答える