2012-06-13 1 views
10

Je dois transmettre un objet personnalisé à l'aide de RESTTemplate à mon service REST.Comment passer des objets personnalisés à l'aide du modèle REST de 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........"); 

Je ne suis pas en mesure d'ajouter mon objet personnalisé à MultiValueMap. La génération de requête est en échec.

Quelqu'un peut-il m'aider à trouver une solution? Je peux simplement passer un objet chaîne sans problème. Les objets définis par l'utilisateur posent le problème.

Appréciez toute aide !!!

Répondre

26

You can do it fairly simply with Jackson.

Voici ce que j'ai écrit pour un Post d'un simple 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); 

Le lien ci-dessus devrait vous dire comment le configurer en cas de besoin. C'est un très bon tutoriel.

+0

Comment puis-je recevoir ce NewObject dans le serveur (par exemple, le récepteur) fin ?? – KJEjava48

+1

@ KJEjava48 Pour recevoir NewObject dans RestController '@PostMapping ("/create ") public ResponseEntity createNewObject (@RequestBody NewObject newObject) {// fais tes affaires}' – Darshan

2

Pour recevoir NewObject dans RestController

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

vous pouvez essayer cette

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; 
    } 
Questions connexes