2012-06-13 10 views
10

Mam wymóg przekazania niestandardowego obiektu przy użyciu RESTTemplate do mojej usługi REST.Jak przekazywać niestandardowe obiekty za pomocą szablonu REST Spring'a

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........"); 

Nie mogę dodać mojego niestandardowego obiektu do MultiValueMap. Generowanie żądań kończy się niepowodzeniem.

Czy ktoś może mi pomóc znaleźć sposób na to? Mogę po prostu przekazać obiekt typu string bez problemu. Obiekty zdefiniowane przez użytkownika stanowią problem.

Doceń każdą pomoc !!!

Odpowiedz

26

You can do it fairly simply with Jackson.

Oto, co napisałem dla Posta o prostym 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); 

Powyższy link powinien powiedzieć, jak ustawić go w razie potrzeby. To całkiem niezły tutorial.

+0

Jak mogę otrzymać ten NewObject na serwerze (czyli odbiornik) koniec ?? – KJEjava48

+1

@ KJEjava48 Aby otrzymać NewObject w RestController '@PostMapping ("/create ") public ResponseEntity createNewObject (@RequestBody NewObject newObject) {// wykonaj swoje rzeczy}' – Darshan

2

Aby otrzymać NewObject w RestController

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

można spróbować tego

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; 
    } 
Powiązane problemy