【问题标题】:org.springframework.http.converter.HttpMessageNotReadableException While calling rest post callorg.springframework.http.converter.HttpMessageNotReadableException 调用休息后调用时
【发布时间】:2017-08-08 13:30:06
【问题描述】:

这是我的客户端代码

    RestTemplate restTemplate = new RestTemplate();
    ResponseEntity responseEntity = restTemplate.postForObject(appConfig.getRestUrl(),processFiles, ResponseEntity.class);

这是我的 Rest 控制器代码:

@RequestMapping(value = "/v1/processfiles/", method = RequestMethod.POST)
public ResponseEntity addProcessFiles(@RequestBody List<ProcessFiles> processFiles) {
    try {
        processFilesDao.save(processFiles);
        return ResponseEntity.status(HttpStatus.OK).body("Success");
    } catch (Exception e) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Failure occured at server side");
    }

如果我在调用后使用 String.class 作为返回类型,则相同的代码有效。但不适用于 Response 实体类。如果我需要客户端也需要相同的响应实体,我做错了什么

org.springframework.http.converter.HttpMessageNotReadableException:JSON 解析错误:无法识别的令牌“成功”:期待(“真”、“假”或“空”);嵌套异常是 com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'Success': was expected ('true', 'false' or 'null') 在 [来源:java.io.PushbackInputStream@15778da9;行:1,列:15] 在 org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:244) 在 org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:229) 在 org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:96) 在 org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:655) 在 org.springframework.web.client.RestTemplate.execute(RestTemplate.java:613) 在 org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:380) 在 com.mmx.ta2s3.serviceImpl.Ta2S3ServiceImpl.callRestService(Ta2S3ServiceImpl.java:170) 在 com.mmx.ta2s3.Ta2S3Application.task(Ta2S3Application.java:48) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:366) 在 org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:311) 在 org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:134) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:409) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1620) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761) 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) 在 org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) 在 org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:303) 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) 在 com.mmx.ta2s3.Ta2S3Application.main(Ta2S3Application.java:38) 引起:com.fasterxml.jackson.core.JsonParseException:无法识别的令牌“成功”:期待(“真”、“假”或“空”) 在 [来源:java.io.PushbackInputStream@15778da9;行:1,列:15] 在 com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1702) 在 com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:558) 在 com.fasterxml.jackson.core.json.UTF8StreamJsonParser._reportInvalidToken(UTF8StreamJsonParser.java:3528) 在 com.fasterxml.jackson.core.json.UTF8StreamJsonParser._handleUnexpectedValue(UTF8StreamJsonParser.java:2686) 在 com.fasterxml.jackson.core.json.UTF8StreamJsonParser._nextTokenNotInObject(UTF8StreamJsonParser.java:878) 在 com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:772) 在 com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:3834) 在 com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3783) 在 com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2922) 在 org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:241) ... 31 更多

【问题讨论】:

    标签: java json spring rest


    【解决方案1】:

    试试这个:

    @RequestMapping(value = "/v1/processfiles/", method = RequestMethod.POST)
    public ResponseEntity addProcessFiles(@RequestBody List<ProcessFiles> processFiles) {
    try {
        processFilesDao.save(processFiles);
        return new ResponseEntity<>("Success", HttpStatus.OK);
    } catch (Exception e) {
        return new ResponseEntity<>("Failure occured at server side", HttpStatus.INTERNAL_SERVER_ERROR);
    }
    

    【讨论】:

    • 还是一样的结果兄弟!
    • 试试这个return new ResponseEntity&lt;&gt;("true", HttpStatus.OK);
    • 以下错误:JSON 解析错误:无法构造 org.springframework.http.ResponseEntity 的实例:没有从布尔值反序列化的布尔/布尔参数构造函数/工厂方法(真);嵌套异常是 com.fasterxml.jackson.databind.JsonMappingException:无法构造 org.springframework.http.ResponseEntity 的实例:没有布尔/布尔参数构造函数/工厂方法从布尔值反序列化(true)
    • 发送正文为空怎么办?
    【解决方案2】:

    我不确定,但我认为它无法将“成功”字符串转换为 ResponseEntity,请改用字符串泛型类型:

    @RequestMapping(value = "/v1/processfiles/", method = RequestMethod.POST)
    public ResponseEntity<String> addProcessFiles(@RequestBody List<ProcessFiles> processFiles) {
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-12
      • 2020-08-08
      • 1970-01-01
      • 1970-01-01
      • 2011-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多