0

私はSpring RestControllerを持っています。

@RestController
public class TestController {

    @RequestMapping("/checkTestObject")
    public MyPOJOObject3 checkTestObject(MyPOJOObject1 obj1, MyPOJOObject2 obj2) {
        //Using obj1 and obj2 - business logic
        return new MyPOJOObject3();
    }
}

ここで、MyPOJOObject1、MyPOJOObject2、および MyPOJOObject3 は、setter フィールドと getter フィールドを使用して私が定義した 3 つのカスタム オブジェクトです。そして、私が試したクライアントは、

public class TestClient(
    public static void main(String args[]){

        MyPOJOObject1 obj1 = new MyPOJOObject1();
        obj1.setInfoChgDate(new Date());
        obj1.setInfoRegUserName("NEW_USER");
        MyPOJOObject2 obj2 = new MyPOJOObject2();
        obj2.setId(121l);
        obj2.setDescription("Hello TestDemo");

        String url = "http://localhost:8080/TestApp/checkTestObject";
        MultiValueMap<String, Object> formData = new LinkedMultiValueMap<String, Object>();
        formData.set("obj1", obj1);
        formData.set("obj2", obj2);
        // Prepare acceptable media type
        List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
        acceptableMediaTypes.add(MediaType.ALL);
        HttpHeaders headers = new HttpHeaders();
        headers.setAccept(acceptableMediaTypes);
        HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(formData, headers);
        ResponseEntity<MyPOJOObject3> response = null;
        try {
            response = restTemplate.exchange(url, HttpMethod.POST, httpEntity, MyPOJOObject3.class);
            logger.debug(url + " :: response :: " + response.toString());
        } catch (Exception exception) {
            logger.error(url + " :: Exception thrown :: ", exception);
        }
        //response.getBody();
    }
)

Tomcat に RestController をデプロイしてクライアントを実行すると、次のようなエラーが発生します。

2015-07-27 14:54:47,230 [main] ERROR TestController - http://localhost:8080/TestApp/checkTestObject :: Exception thrown :: 
org.springframework.web.client.HttpClientErrorException: 405 Method Not Allowed
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91)
    at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:607)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:565)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:521)

私の質問は、これは Spring を使用して REST 経由でカスタム オブジェクトを送受信する正しい方法ですか、それとも他の方法はありますか? getForObject、postForObject、postForLocation などの他の RestTemplate メソッドを使用してみましたが、うまくいきませんでした。受信する複雑なオブジェクトを JSON 経由で REST 経由で送信する標準的な方法があるかどうかを教えてください。または、オブジェクトを JSON 文字列に変換する - 送信する - JSON 文字列をオブジェクトに戻す、またはその逆の方法で行う必要があります。ここで自分の仕事に打たれたので、オプションを教えてください

ありがとう

4

2 に答える 2

1
405 Method Not Allowed

POSTつまり、ではないメソッドにしようとしていPOSTます。@RequestMappingデフォルトの方法は ですGET。コントローラーのコードを次のように変更します。

アップデート

@RestController
public class TestController {

    @RequestMapping(value="/checkTestObject", method=RequestMethod.POST)
    public MyPOJOObject3 checkTestObject(@RequestParam MyPOJOObject1 obj1, @RequestParam MyPOJOObject2 obj2) {
        //Using obj1 and obj2 - business logic
        return new MyPOJOObject3();
    }
}

400 Bad Request エラーを修正するには、obj1 と obj2 の前に @RequestParam を追加する必要があります。それらをフォームデータの一部として送信しているためです。上記のコードを参照してください。

于 2015-07-28T02:53:32.893 に答える
0

使用@RequestBody:

@RestController public class TestController {

@RequestMapping(value="/checkTestObject", method=RequestMethod.POST)
public MyPOJOObject3 checkTestObject(@RequestBody MyPOJOObject1 obj1, @RequestBody MyPOJOObject2 obj2) {
        //Using obj1 and obj2 - business logic
        return new MyPOJOObject3();
    }
}
于 2015-07-28T08:32:49.057 に答える