2017-04-21 77 views
0

我正在使用feign进行我的休息呼叫。不幸的是,我得到的回应之一看起来像这样:在密钥名称中使用破折号的JSON响应

{ 
    "customer-id" : "0123" 
} 

JSON响应会自动映射到我的一个POJO。此响应对象不能具有名称为“customer-id”的属性字段,因为标识符名称中不允许使用破折号( - )。

我试过如下:

public class LookUpAccountsResponse { 
     @JsonProperty("customer-id") 
     private String customerId; 
} 

但不幸的是,这并不工作。有没有人有关于如何解决这个问题的建议?

+0

在JSON规范中,它表示不允许破折号? –

+0

JSON规范是什么意思?我知道JSON响应在其关键字(“customer-id”)中有 - 。问题是创建一个具有相似名称的Java属性字段(因此可以映射它)。 –

+0

有效的JSON密钥http://json.org有一个标准定义...我不确定错误是什么,但下面的答案表明破折号不是问题,所以你可以尝试创建一个[mcve]就像他们有? –

回答

0

它工作正常。这里是一个简单的例子:

public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException { 
    SomeClass sc = new ObjectMapper().readValue("{\"property-with-dash\": 5}", SomeClass.class); 

    System.out.println(sc.propertyWithDash); 
    } 

    public static class SomeClass { 
    @JsonProperty("property-with-dash") 
    private int propertyWithDash; 
    } 

这打印5如预期。没什么好抱怨的。

+0

我没有使用ObjectMapper。我不确定Feign框架如何将响应映射到响应对象。 –

+0

你知道它使用的是什么框架吗?因为那将决定如何配置它。自从您使用'@ JsonProperty'注释以来,我就假设了Jackson。 – john16384

+0

@Robert你使用'GsonDecoder'还是'JacksonDecoder'?如果是后者,它确实使用了ObjectMapper –

0

使用JsonObjects和JsonArrays将允许您获取键和值作为字符串

相关问题