如何使用 Spring Boot 序列化带有连字符的 JSON?

Posted

技术标签:

【中文标题】如何使用 Spring Boot 序列化带有连字符的 JSON?【英文标题】:How do I serialize JSON with hyphen in key using Spring Boot? 【发布时间】:2019-01-01 05:37:54 【问题描述】:

我有以下 JSON...


    "navigation-items":[
       
           "title":"Title",
           "description":"This is the desc",
           "link":"http://google.com"
       
    ]

我有以下 Java

public class ExternalConfig 
    @SerializedName("navigation-items")
    private List<NavigationItem> items;

    public NavigationItem getNavItem(Integer index)
        return items.get(index);
    

    public void putNavItem(NavigationItem item)
        items.add(item);
    

    public Integer navItemSize()
        return items == null ? 0 : items.size();
    


...

@PostMapping("config")
@ResponseBody
public void setConfig(@RequestBody ExternalConfig config)
    System.out.println(config.navItemSize() > 0);

但是当我发送带有以下正文的请求时......


    "navigation-items":[
        
            "title":"Title",
            "description":"This is the desc",
            "link":"http://google.com"
        ,
            "title":"Test 2",
            "description":"asdasdsadsadas",
            "link":"http://drudgereport.com"
        
    ]

但是当我中断端点时,项目是空的。如何将带有连字符键的 JSON 传递给 Spring Boot?

【问题讨论】:

如果所有属性都遵循连字符命名模式;你可以使用 PropertyNamingStrategy.KebabCaseStrategy 【参考方案1】:

如果你使用 spring-boot,请使用 @JsonProperty。

@JsonProperty("navigation-items")
private List<NavigationItem> items;

【讨论】:

【参考方案2】:

这里真正的问题是我没有像这样包含 jackson-databind...

 compile 'com.fasterxml.jackson.core:jackson-databind:latest.release'

不确定是否有使用 GSON 的方法,因为我已经有了,但现在我将只使用 jackson。

【讨论】:

以上是关于如何使用 Spring Boot 序列化带有连字符的 JSON?的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot:JSON将带有时区的日期和时间反序列化为LocalDateTime

在 Spring Boot + Spring Data Rest 中反序列化时忽略带有 @JsonProperty 的字段

使用spring boot将JSON反序列化为带有通用对象列表的POJO

如何在 Spring Boot 中为 Camel 配置 Jackson ObjectMapper

Spring Boot Jackson 和数据序列化

Spring Boot:没有从字符串值反序列化的字符串参数构造函数/工厂方法