Как передать пользовательские объекты с помощью шаблона Spring REST

У меня есть требование передать пользовательский объект с помощью RESTTemplate в мою службу 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........");

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

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

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


person ASChakkalakal    schedule 13.06.2012    source источник


Ответы (3)


С Джексоном это можно сделать довольно просто.

Вот что я написал для поста о простом 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);

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

person Chris    schedule 20.06.2012
comment
Как я могу получить этот NewObject на стороне сервера (т.е. получателя)?? - person KJEjava48; 22.08.2016
comment
@KJEjava48 Чтобы получить NewObject в RestController @PostMapping("/create") public ResponseEntity<String> createNewObject(@RequestBody NewObject newObject) { // do your stuff} - person Darshan; 13.10.2016

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

@PostMapping("/create") public ResponseEntity<String> createNewObject(@RequestBody NewObject newObject) { // do your stuff}
person Anand    schedule 05.10.2016
comment
Вопрос касается построения запроса на стороне клиента, но ваш ответ касается стороны сервера. - person Nicola Musatti; 23.05.2019

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

 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;
    }
person jesus armando macias benitez    schedule 07.11.2017