2012-06-13 3 views
10

У меня есть требование передать пользовательский объект, используя RESTTemplate, в мою службу REST.Как передать пользовательские объекты с использованием шаблона REST Spring

RestTemplate restTemplate = new RestTemplate(); 
MultiValueMap<String, Object> requestMap = new LinkedMultiValueMap<String, Object>(); 
... 

requestMap.add("file1", new FileSystemResource(..); 
requestMap.add("Content-Type","text/html"); 
requestMap.add("accept", "text/html"); 
requestMap.add("myobject",new CustomObject()); // This is not working 
System.out.println("Before Posting Request........"); 
restTemplate.postForLocation(url, requestMap);//Posting the data. 
System.out.println("Request has been executed........"); 

Я не могу добавить свой пользовательский объект в MultiValueMap. Генерация запроса перестает работать.

Может кто-нибудь поможет мне найти способ для этого? Я могу просто передать строковый объект без проблем. Заданные пользователем объекты создают проблему.

Цените любую помощь !!!

ответ

26

You can do it fairly simply with Jackson.

Вот что я написал для публикации простого POJO.

@XmlRootElement(name="newobject") 
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) 
public class NewObject{ 
    private String stuff; 

    public String getStuff(){ 
     return this.stuff; 
    } 

    public void setStuff(String stuff){ 
     this.stuff = stuff; 
    } 
} 

.... 
//make the object 
NewObject obj = new NewObject(); 
obj.setStuff("stuff"); 

//set your headers 
HttpHeaders headers = new HttpHeaders(); 
headers.setContentType(MediaType.APPLICATION_JSON); 

//set your entity to send 
HttpEntity entity = new HttpEntity(obj,headers); 

// send it! 
ResponseEntity<String> out = restTemplate.exchange("url", HttpMethod.POST, entity 
    , String.class); 

Ссылка выше должен сказать вам, как установить его в случае необходимости. Это довольно хороший учебник.

+0

Как я могу получить эту NewObject на сервере (например, приемник) конец ?? – KJEjava48

+1

@ KJEjava48 Получить NewObject в RestController '@PostMapping ("/create ") public ResponseEntity createNewObject (@RequestBody NewObject newObject) {// делать ваши вещи}' – Darshan

2

Чтобы получить NewObject в RestController

@PostMapping("/create") public ResponseEntity<String> createNewObject(@RequestBody NewObject newObject) { // do your stuff} 
0

вы можете попробовать это

public int insertParametro(Parametros parametro) throws LlamadasWSBOException { 
     String metodo = "insertParam"; 
     String URL_WS = URL_WS_BASE + metodo; 

     Integer request = null; 

     try { 
      logger.info("URL_WS: " + URL_WS); 

      request = restTemplate.postForObject(URL_WS, parametro, Integer.class); 

     } catch (RestClientResponseException rre) { 
      logger.error("RestClientResponseException insertParametro [WS BO]: " + rre.getResponseBodyAsString()); 
      logger.error("RestClientResponseException insertParametro [WS BO]: ", rre); 
      throw new CallWSBOException(rre.getResponseBodyAsString()); 
     } catch (Exception e) { 
      logger.error("Exception insertParametro[WS BO]: ", e); 
      throw new CallWSBOException(e.getMessage()); 
     } 
     return request; 
    }