web-dev-qa-db-fra.com

Comment passer des objets personnalisés à l'aide de Spring REST Modèle

J'ai l'obligation de transmettre un objet personnalisé à l'aide de RESTTemplate à mon service REST.

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 parviens pas à ajouter mon objet personnalisé à MultiValueMap. La génération de requête échoue.

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

Appréciez toute aide !!!

11
ASChakkalakal

Vous pouvez le faire assez simplement avec Jackson .

Voici ce que j'ai écrit pour un article 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 si nécessaire. C'est un très bon tutoriel.

30
Chris

Pour recevoir NewObject dans RestController

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

tu peux essayer ça 

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