簡體   English   中英

具有多個自定義對象的@Restcontroller方法

[英]@Restcontroller method with multiple custom objects

我有一個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();
    }
)

當我在雄貓上部署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發送和接收自定義對象的正確方法,還是還有其他方法? 我嘗試使用其他RestTemplate方法,例如getForObject,postForObject,postForLocation等,但是沒有運氣。 請讓我知道是否有通過JSON通過REST通過REST發送接收復雜對象的任何標准方法,或者我必須采取以下方式-將對象轉換為JSON字符串-發送過來-將JSON字符串轉換回Object,反之亦然。 當我對這里的工作感到震驚時,請告訴我各種選擇

謝謝

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。 因為您將這些作為formdata的一部分發送。 請參見上面的代碼。

使用@RequestBody

@RestController公共類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();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM