使用 Spring boot 解析具有无效键值的 JSON 对象

Posted

技术标签:

【中文标题】使用 Spring boot 解析具有无效键值的 JSON 对象【英文标题】:Parsing a JSON object with invalid key values using Spring boot 【发布时间】:2016-01-31 03:09:35 【问题描述】:

我已经使用 Spring boot 有一段时间了,所以我可以说我对使用它非常满意。

但是有一个问题我永远无法解决。 当我希望我的 Spring 引导服务器使用来自前端的 JSON 对象时,我通常像这样使用@RequestBody: 如果 JSON 对象如下所示:

"name":"Jason"

我会像这样创建一个 POJO:

public class User
    private String name;

    public void setName(String name)
        this.name=name;
    


    public String getName()
        return this.name
    

然后在我的主控制器中,我会像这样简单地使用@RequestBody:

@RequestMapping(value="createUser", method = RequestMethod.POST)
public void createUser(@RequestBody User user)
    //code here

这会起作用,因为 JSON 对象中的键“name”与 Java User 对象的属性“name”匹配。

但是,在我当前的项目中,我必须使用带有 " # Name ":"Jason" 之类的键的 JSON 对象

在这种情况下,我无法创建带有名为#Name 的属性的 POJO 对象,因为显然对象的属性不能以 # 开头,也不能有空格。

当遇到这样的问题时,我通常会这样做

@RequestBody HashMap<String, String> map

然后

User newUser = new User();
newUser.setName(map.get(" # Name"));

但是,当您有一个包含 40 多个键的 JSON 对象时,这可能会变得很麻烦。

有没有更简单的方法来解析带有在 Java 中无效的键的 JSON 对象?

非常感谢!

【问题讨论】:

【参考方案1】:

尝试使用@JsonProperty 注释您的name 成员。

@JsonProperty(" # name")
private String name;

这将允许反序列化器将您的 JSON 有效负载中的密钥与您的 POJO 成员相匹配。

【讨论】:

有时我想知道为什么我没有早点来 Stack Overflow -_- .. 这会节省我在处理哈希图上浪费的时间!非常感谢darrengorman!正是我想要的!像魔术一样工作!

以上是关于使用 Spring boot 解析具有无效键值的 JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章

带有 Thymeleaf th:object 的 Spring Boot 使用具有现有值的对象而不覆盖它们

spring boot中请求json正文中存在变量键值时处理RequestBody

如何为具有属性依赖项的 Spring Boot Application 类编写测试用例 - 无法解析占位符

Spring Boot 如何知道 Heroku 的 DATABASE_URL 配置变量?

检查对象数组中是不是存在具有特定键值的对象

Spring boot & Spring Security : 转发无效的 url