【问题标题】:Getting failed to read HTTP message, while trying to use put with resttemplate尝试将 put 与 resttemplate 一起使用时无法读取 HTTP 消息
【发布时间】:2018-03-28 11:46:13
【问题描述】:

我正在学习弹簧靴。并在使用 resttemplate 更新下面的休息服务时

RestTemplate restTemplate = new RestTemplate();

//        restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
//        restTemplate.getMessageConverters().add(new StringHttpMessageConverter());


        HttpHeaders httpHeaders = restTemplate.headForHeaders("http://localhost:8080/getallblade");

        List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
        messageConverters.add(new FormHttpMessageConverter());
        messageConverters.add(new StringHttpMessageConverter());

        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        converter.setSupportedMediaTypes(Arrays.asList(MediaType.ALL));

        messageConverters.add(new MappingJackson2XmlHttpMessageConverter());

        messageConverters.add(converter);  
        restTemplate.setMessageConverters(messageConverters);

        BladeView blade  = new BladeView();
        blade.setBladeId(id);
        blade.setAppStatus(false);
        blade.setOperStatus(false);
        blade.setPowerStatus(powerstatus);


        HttpEntity<BladeView> requestUpdate = new HttpEntity<>(blade, httpHeaders);

        restTemplate.exchange("http://localhost:8080"+"/addd", HttpMethod.PUT, requestUpdate, Void.class);

我已经用 put 而不是 exchange 尝试了上述代码的多个版本,但得到了与以下相同的错误:

Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token
 at [Source: java.io.PushbackInputStream@696b5835; line: 1, column: 1]
org.springframework.web.client.HttpClientErrorException: 400 null
...................
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:539)
    at com.rhevm.server.COTSSERVER.updatePowerStatus(COTSSERVER.java:102)

这些是我的控制器、服务和模型

@RequestMapping(value="/addd",method=RequestMethod.PUT,consumes = "application/json", produces = "application/json")
    public void add(@RequestBody List<BladeView> bladeView) {
         System.out.println(bladeView);
         bladeViewService.add(bladeView);
    }




public void add(List<BladeView> bladeView) {
         baldeViewRepository.save(bladeView);
     }


@Entity
@Table(name="bladeview")
public class BladeView {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer bladeId;

请您指导一下,因为我无法解决这个问题。

【问题讨论】:

    标签: java hibernate spring-mvc spring-boot


    【解决方案1】:

    你可以这样扔

      HttpHeaders httpHeaders = restTemplate.headForHeaders("http://localhost:8080/getallblade");
            headers.setContentType(MediaType.APPLICATION_JSON);
    
            HttpEntity<String> entity = new HttpEntity<String>(jsonRequest, headers);
    
            BladeView blade  = new BladeView();
            blade.setBladeId(id);
            blade.setAppStatus(false);
            blade.setOperStatus(false);
            blade.setPowerStatus(powerstatus);
            ArrayList<BladeView> list = new ArrayList();
            list.add(blade)
    
            ObjectMapper om = new ObjectMapper();
            String jsonRequest = jsonObjectMapper.writeValueAsString(blade);
            restTemplate.put(uri, entity);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-13
      • 1970-01-01
      • 1970-01-01
      • 2019-05-26
      • 1970-01-01
      • 2018-10-15
      • 1970-01-01
      • 2023-02-01
      相关资源
      最近更新 更多