【问题标题】:RequestBody JSON format has single quotesRequestBody JSON 格式有单引号
【发布时间】:2018-03-07 18:55:05
【问题描述】:

我的 SpringBoot 应用中有一个控制器类。

@RestController
@RequestMapping("/{database}/alerts")
public class ControllerB {
  @Autowired private ServiceB serviceB;

  @Autowired
  private B b;

  @Autowired
  ControllerB(B b,ServiceB serviceB){
      this.b = b;
      this.serviceB = serviceB;
  }

  @RequestMapping(method = RequestMethod.POST)
  public B dosomethingCrazy(@RequestBody BImpl bimpl)  {


      String response = serviceB.dosomethingImportant();
      return bimpl;

  }

}

当 requestBody 的值中有一个单引号时,就会出现问题。例如,如果 requestbody 是 {"name" : "peter o'tool"},它会抛出一个 http 400

"status":400,"error":"Bad Request","exception":"org.springframework.http.converter.HttpMessageNotReadableException","message":"JSON 解析错误: Unexpected end-of-input in VALUE_STRING

知道 Jackson 如何将单引号值映射到对象字段吗?

【问题讨论】:

    标签: java spring jackson


    【解决方案1】:

    在您的 application.properties 文件中设置以下属性:

    spring.jackson.parser.allow-single-quotes=true
    

    【讨论】:

      【解决方案2】:

      创建此类以设置 Jackson 并启用单引号:

      @Configuration
      public class JsonConfigurer {
      
          @Bean
          @Primary
          public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) {
              ObjectMapper objectMapper = builder.build();
              objectMapper.enable(JsonParser.Feature.ALLOW_SINGLE_QUOTES)
              return objectMapper;
          }
      
      }
      

      【讨论】:

      • Dherik,谢谢!但我如何申请课程?我是春天的新手,如果这是一个基本问题,很抱歉。
      • 只需在 Spring 可以扫描的某个包中创建此类。你试一试 :)。即使在你的控制器的同一个包中也可以工作
      • 谢谢!! Wim Deblauwe 的另一个答案也有效。
      【解决方案3】:

      不确定您使用的是哪个版本的 Spring Boot。使用 1.4.3.RELEASE,我可以像这样卷曲到我的端点:

      curl -X POST --header "Content-Type: application/json" --header "Accept: */*" -d "{\"name\":\"peter o'toole\"}" "https://localhost:5443/test"
      

      我应该补充一点,我们的 Jackson 版本是 2.7.2。我不确定这是否会导致它工作。

      【讨论】:

        猜你喜欢
        • 2020-05-26
        • 2021-11-06
        • 1970-01-01
        • 2017-11-12
        • 2019-05-21
        • 1970-01-01
        • 2022-01-19
        • 1970-01-01
        • 2018-05-19
        相关资源
        最近更新 更多