gpt4 book ai didi

java - 如何JSON解析Java + Jersey中的不可变对象(immutable对象)

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:58:39 24 4
gpt4 key购买 nike

所以我只是尝试使用 Jersey for REST 服务,看起来我们工作得很好。我只公开获取服务,我使用这些服务公开的所有对象类型在 Java 中都有一个不可变的对象表示。默认情况下,Jersey 似乎使用解析器(JAXB?),需要为应解析的类、零参数构造函数和 setter 提供 @XmlRootElement 注释。

我一直在使用没有零参数构造函数、没有 setter 和 final 的 Gson,在所有字段上都没有任何问题。有没有什么办法可以用 Jersey(即它使用的 paser)来完成这个?我已经看到了适配器类的解决方案,这些适配器类将数据从不可变对象(immutable对象)映射到可变表示,但如果可以使用 Gson 实现而无需添加任何内容,这似乎有很多样板(新类、更多注释等)。

注意:1) 我听说有人提倡使用零参数构造函数,并声称没有它 Gson 就不能工作。这不是我感兴趣的。2) 我确实尝试过用谷歌搜索这个,但我的关键字可能不对。换句话说,羞辱我要适度。

编辑 1:如果我这样做,我的网络服务就会工作:

@XmlRootElement
public class Code{
private String code; //Silly object just used for example.
public Code(){}
//(G || S)etters
}

通过此类公开对象:

@GET
@Produces(MediaType.APPLICATION_JSON)
public Set<Code> get(@QueryParam("name") String name) { // Here I want to use a class of my own instead of String name, haven't figured out how yet.
return this.codeService.get(name);
}

如果我用以下代码替换代码,网络服务将停止工作:

public class Code{
private final String code;

@JsonCreator
public Code(@JsonProperty("code") String code) {
this.code = code;
}
//Getters omitted
}

我想要的是能够 1) 拥有可以解析为 json 或从 json 解析的不可变对象(immutable对象),以及 2) 能够在 Spring MVC 中为我的传入对象定义类似 @RequestBody 的东西。

最佳答案

实际上,使用 Genson 可以很容易.您只需要 jar,然后配置 Genson 功能以使用带参数的构造函数(如果您不想在其上放置注释)。

Genson genson = new GensonBuilder().useConstructorWithArguments(true).create();
// and then register it with jersey
new ResourceConfig().register(new GensonJaxRSFeature().use(genson));

或者您可以对参数使用 JsonProperty。查看User Guide了解更多详情。

关于java - 如何JSON解析Java + Jersey中的不可变对象(immutable对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31220778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com