2016-09-29 9 views
0

У меня есть POST API, написанный в Restlet framework, который принимает данные в форме org.restlet.representation.Representation, я хочу попасть в службу с некоторыми переменными и там значения из проекта Spring. Как это сделать?Вызов RESTlet API из Spring Framework

Сейчас я использую HTTPHeaders для отправки данных, но API не принимает значения, все поля API отображаются как NULL. Код выглядит следующим образом:

final String uri = "http://localhost:8080/MyServices/adduser"; 
    String userid = "05580a6caa7244a6986ca834403f1a93"; 
    String usertype = "buyer"; 
    String username = "shivam42"; 
    RestTemplate restTemplate = new RestTemplate(); 

    HttpHeaders headers = new HttpHeaders(); 
    headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON)); 
    headers.add("userid", userid); 
    headers.add("usertype", usertype); 
    headers.add("username", username); 
    HttpEntity<String> entity = new HttpEntity<String>("parameters", headers); 

    ResponseEntity<String> result = restTemplate.exchange(uri, HttpMethod.POST, entity, String.class); 
    System.out.println(result); 

И сервис, как это:

@Post 
public String newUser(Representation entity) { 
    Form form = new Form(entity); 
    String userid = form.getValues("userid"); 
    String usertype = form.getValues("usertype"); 
    String username = form.getValues("username"); 
    System.out.println(userid); 
    System.out.println(usertype); 
    System.out.println(username); 
    return userid; 
} 

Это код, сгенерированный из завитка Может быть кто-то может помочь мне с этим:

curl -X POST -H "Cache-Control: no-cache" -H "Postman-Token: 33e6a1c5-c1c9-694f-3d7f-26cbcea61870" -H "Content-Type: application/x-www-form-urlencoded" -d 'userid=05580a6caa7244a6986ca834403f1a93&usertype=buyer&username=shivam42' "http://localhost:8080/MyServices/adduser" 

When Я называю API от POSTMAN, он дает мне правильный userid, теперь как назвать его из проекта Spring? Я делаю что-то неправильно?

+0

Вы попробовали его с помощью завитка, и если да, вы можете поделиться (или экспортировать) команду примера скручивания? спасибо заранее –

+0

Нет, я не пробовал его с завитом – Shivam

+0

Это могло бы помочь много проанализировать и понять причину. Его легко экспортировать через почтальон. Смотрите: https://www.getpostman.com/docs/creating_curl –

ответ

0

От Spring forum Я нашел решение этой проблемы. Теперь мой код:

final String uri = "http://localhost:8080/MyServices/adduser"; 
String userid = "05580a6caa7244a6986ca834403f1a93"; 
String usertype = "buyer"; 
String username = "shivam42"; 
MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>(); 
params.add("userid", userid); 
params.add("usertype", usertype); 
params.add("username", username); 

RestTemplate restTemplate = new RestTemplate(); 
HttpMessageConverter formHttpMessageConverter = new FormHttpMessageConverter(); 
HttpMessageConverter stringHttpMessageConverternew = new StringHttpMessageConverter(); 
List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>(); 
messageConverters.add(stringHttpMessageConverternew); 
messageConverters.add(formHttpMessageConverter); 
restTemplate.setMessageConverters(messageConverters); 
System.out.println(restTemplate.postForObject(uri, params, String.class)); 

В моем случае я также получаю ожидаемый результат Если исключить следующий код:

HttpMessageConverter formHttpMessageConverter = new FormHttpMessageConverter(); 
HttpMessageConverter stringHttpMessageConverternew = new StringHttpMessageConverter(); 
List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>(); 
messageConverters.add(stringHttpMessageConverternew); 
messageConverters.add(formHttpMessageConverter); 
restTemplate.setMessageConverters(messageConverters); 
0

@Shivam Спасибо за обновление вопроса. С помощью команды curl я теперь вижу, что данные, которые вы в основном хотели отправить, находятся внутри тела запроса. Поэтому первый подход с HttpHeaders не будет работать. Вот пример того, как это может выглядеть для вашего первого подхода с использованием метода exchangeRestTemplate Спрингс:

@Test 
public void test() { 
    RestTemplate restTemplate = new RestTemplate(); 
    final String uri = "http://localhost:8080/adduser"; 
    String userid = "05580a6caa7244a6986ca834403f1a93"; 
    String usertype = "buyer"; 
    String username = "shivam42"; 

    // create request body 
    JSONObject request = new JSONObject(); 
    request.put("userid", userid); 
    request.put("usertype", usertype); 
    request.put("username", username); 

    // set headers 
    HttpHeaders headers = new HttpHeaders(); 
    headers.setContentType(MediaType.APPLICATION_JSON); 
    HttpEntity<String> entity = new HttpEntity<>(request.toString(), headers); 

    ResponseEntity<String> result = restTemplate.exchange(uri, HttpMethod.POST, entity, String.class); 
    System.out.println(result.getBody()); 
} 

Это также должно работать, как и ожидалось, и вернуть userid. См. Также POST request via RestTemplate in JSON для получения дополнительной информации.

+0

Я попробовал , но он не дает результата, как ожидалось. Веб-сервис получает Null для всех трех параметров. – Shivam