java - 当值包含引号时在 Spring Controller 中正确解析 JSON

标签 java json spring jackson gson

我需要在 Spring Web 服务中接收和解析一些 JSON。 JSON 在 HTTP POST 请求中发送,我无法控制此请求的格式、 header 等。这是请求的示例:

{
"u": 1,
"t": "token",
"rental": "rental_name",
"address": "rental_address",
"arrive": "Monday, Jan. 1 2018",
"depart": "Wednesday, Jan. 3 2018",
"adults": 1,
"children": 0,
"guest": "guest_name",
"keys": "key location with "quotes" goes here",
"inquiry": "inquiry_id"
}

请注意,“keys”的值中有双引号。

当我在我的 Spring Controller 中使用请求时,我可以理解地得到以下异常,因为该值中的引号混淆了它:

org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'text/plain;charset=UTF-8' not supported

这是我的 Spring Controller 中接收 POST 请求的方法:

@RequestMapping(value ="/booking_new", method = RequestMethod.POST, consumes = MediaType.ALL_VALUE)
public ResponseEntity newBooking(@RequestBody Booking payload){
    //Extract values from the generated Booking object etc
}

我无法接收作为字符串的 @RequestBody 并且只能对引号进行转义,因为所有引号都将被转义,从而使 JSON 无效。

有什么方法可以在收到请求时以某种方式转义或删除任何值中的引号?

最佳答案

虽然我无法控制包含 JSON 值的变量,但我发现我确实可以控制整个 POST 请求的格式。

所以我最终将格式设置为 XML 而不是 JSON,因为它更容易解决双引号问题。

关于java - 当值包含引号时在 Spring Controller 中正确解析 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47885583/

相关文章:

Spring oauth2 hasRole 访问被拒绝

java - 使用 ContextRefreshedEvent 参数为私有(private)方法创建 JUnit

java - 如何使用java将数据加载到MarkLogic的数据库中?

javascript - 在javascript中从任意复杂的JSON对象生成html

java - ObjectMapper 无法解析为类型

json - Akka http 处理程序 json 验证

java - 如何将投影应用于 Spring Data REST 查询方法资源?

Java Swing - 使用定时器刷新 jTable

java - 从 spring 模板连接到加密的 Redis 集群

java - 在 Spring Boot 中将 .csv 文件上传到数据库