【问题标题】:Jersey MOXy not parsing snake_caseJersey MOXy 不解析snake_case
【发布时间】:2016-07-31 15:03:11
【问题描述】:

我将一个 JSON 对象从 PUT 请求传递到我的服务器。请求本身有效,但是 JSON 中带有下划线 (snake_case) 的字段似乎被忽略了。请求输出接收到的数据,看看结果如何,带下划线的值转换为驼峰式,不被解析。这是课程:

Public User{

private int id;
private String name;
private int some_value;

}

我传递给 PUT 请求的 JSON 对象:

{ "id":1, "name":John, "some_value":5 }

PUT 方法只返回 MOXy 在这种情况下捕获的内容

@PUT
@Path("user")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public User addUser(User user){
    return user;
}

输出是:

{ "id":1, "name":John, "someValue":0 }

请注意“some_value”如何更改为“someValue”并且没有更新实际值。知道为什么会这样吗?

【问题讨论】:

    标签: java json jersey moxy


    【解决方案1】:

    MOXy 默认遵循 Java Bean 约定,建议使用驼峰式大小写。如果您不想(或不能)使用驼峰式大小写,可以在字段中添加注释:

    @XmlElement(name = "some_value")
    private int some_value;
    

    如果您不想注释所有字段,请使用XMLNameTransformer

    【讨论】:

    • 解决了一半的问题,现在更新了值。但输出仍然显示骆驼情况。关于如何解决这个问题的任何想法?还是我只需要这样做?
    • @XmlElement 注释应该适用于阅读和写作,所以我猜问题一定出在其他地方。如果您需要更多帮助,可以尝试发布MCVE
    • 其实这行不通。它向现有 JSON 添加了另一个字段“some_value”,现在它同时具有该字段和“someValue”,但具有传递的值
    • 作为一个疯狂的猜测,你的 User 类中有任何 getter/setter 吗?因为您还需要注释或更改它们(或告诉 MOXy 只使用其中一个)。
    • 实际上,setter/getter 传递了一个同名的变量,然后将值更新为传递的值,即 this.some_value = some_value。这是否意味着我也需要将注释放在 getter/setter 参数字段中?
    猜你喜欢
    • 2017-03-10
    • 1970-01-01
    • 2014-12-25
    • 2018-12-23
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    • 2016-04-28
    相关资源
    最近更新 更多