【问题标题】:How to Pass custom objects using Spring's REST Template如何使用 Spring 的 REST 模板传递自定义对象
【发布时间】:2012-06-13 11:19:28
【问题描述】:

我需要使用 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。请求生成失败。

有人可以帮我找到解决方法吗?我可以简单地传递一个字符串对象而不会出现问题。用户定义的对象会产生问题。

感谢任何帮助!!!

【问题讨论】:

    标签: spring-mvc spring-3 rest-client resttemplate


    【解决方案1】:

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

    上面的链接应该告诉您如何在需要时进行设置。这是一个很好的教程。

    【讨论】:

    • 如何在服务器端(即接收端)接收这个NewObject??
    • @KJEjava48 接收RestController中的NewObject @PostMapping("/create") public ResponseEntity&lt;String&gt; createNewObject(@RequestBody NewObject newObject) { // do your stuff}
    【解决方案2】:

    在 RestController 中接收 NewObject

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

    【讨论】:

    • 问题是关于客户端请求构造,但你的答案是关于服务器端的。
    【解决方案3】:

    你可以试试这个

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

    【讨论】:

      猜你喜欢
      • 2012-11-06
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-29
      • 1970-01-01
      • 1970-01-01
      • 2019-11-08
      相关资源
      最近更新 更多