2013-11-21 1 views
5

Мне нужно отправить данные JSON с одного метода обслуживания другому, используя метод postForObject(). Я видел один пример на RestTemplate на this link.Нужна помощь по методу RestTemplate postForObject()

postForObject() метод имеет следующий формат:

User returns = rt.postForObject(uri, u, User.class, vars); 

Или

User returns = rt.postForObject(uri, u, User.class); 

Я хочу знать, что после использования postForObject() метода, если мы реализуем метод услуг, чтобы принять User объект, как это будет выглядеть?

В моем проекте, у меня есть код, подобный

RestTemplate restTemplate = new RestTemplate(); 
restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter()); 
restTemplate.getMessageConverters().add(new StringHttpMessageConverter()); 
String uri = "http://testcode.com/myapp/api/launchservices"; 
ServiceRequest request = new ServiceRequest(); 
request.setId(UUID.randomUUID().toString()); 
.... 

я получаю ошибку на этой линии:

ServiceRequest req = restTemplate.postForObject(uri, request, ServiceRequest.class); 

при выполнении этого, я получаю это электронное письмо об ошибке:

org.springframework.web.client.HttpClientErrorException: 400 Bad Request 
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:88) 
    at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:537) 
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:493) 
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:452) 
    at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:302) 

мой способ осуществления:

@RequestMapping(value = "/launchservices", method = RequestMethod.POST) 
@ResponseBody 
public boolean launchServices(@PathVariable ServiceRequest request) { 
    System.out.println("Request: "+request.toString()); 
    return true; 
} 

Как избавиться от этого? Какой будет URI?

ответ

4

У меня есть решение этой проблемы.

В этом примере метод postForObject возвращает объект класса «ServiceRequest»

ServiceRequest req = restTemplate.postForObject(uri, request, ServiceRequest.class); 

Таким образом, метод, который реализует эту услугу с выше «URI» должен возвращать объект класса ServiceRequest
Все это нуждается, небольшое изменение в способе реализации, как показано ниже

@RequestMapping(value = "/launchservices", method = RequestMethod.POST, headers = "Accept=application/json") 
@ResponseBody 
public ServiceRequest launchServices(@RequestBody ServiceRequest request) { 
    System.out.println("Request: "+request.toString()); 
    return request; 
} 
+0

Человек, которого вы очень долго спасли с этим чистым примером. Ну, это ответ на вопрос, но я использовал его в качестве примера. Ты спас мне много времени, спасибо. Я не могу смотреть обычную игру без стресса. – giannisapi

Смежные вопросы