gpt4 book ai didi

json - Jersey /JAXB : Unmarshaling of empty json array results in a list with one item where all fields are set to null

转载 作者:行者123 更新时间:2023-12-04 16:13:13 24 4
gpt4 key购买 nike

我有一个非常简单的Rest Web服务,它返回一个问题列表。当返回的问题数大于零时,此代码将按预期工作。但是,如果服务器返回像[]这样的空json数组,则JAXB会创建一个包含一个问题实例的列表,其中所有字段均设置为null!

我是Jersey和JAXB的新手,所以我不知道我是否配置不正确,或者这是否是已知问题。有小费吗?

客户端配置:

 DefaultApacheHttpClientConfig config = new DefaultApacheHttpClientConfig();
config.getProperties().put(DefaultApacheHttpClientConfig.PROPERTY_HANDLE_COOKIES, true);
config.getClasses().add(JAXBContextResolver.class);
//config.getClasses().add(JacksonJsonProvider.class); // <- Jackson causes other problems

client = ApacheHttpClient.create(config);

JAXBContextResolver:
@Provider
public final class JAXBContextResolver implements ContextResolver<JAXBContext> {

private final JAXBContext context;
private final Set<Class> types;
private final Class[] cTypes = { Question.class };

public JAXBContextResolver() throws Exception {
this.types = new HashSet(Arrays.asList(cTypes));
this.context = new JSONJAXBContext(JSONConfiguration.natural().build(), cTypes);
}

@Override
public JAXBContext getContext(Class<?> objectType) {
return (types.contains(objectType)) ? context : null;
}

}

客户代码:
public List<Question> getQuestionsByGroupId(int id) {
return digiRest.path("/questions/byGroupId/" + id).get(new GenericType<List<Question>>() {});
}

Question类只是一个简单的pojo。

最佳答案

我知道这并不完全是您的问题的答案,但是对于当前的项目,我选择在 Jersey 上面使用GSON。 (并且我尝试尽可能避免使用JAXB),我发现它非常容易且具有弹性。

您只需要声明

@Consumes(MediaType.TEXT_PLAIN)

或者
@Produces(MediaType.TEXT_PLAIN)

或同时使用两者,并使用GSON编码器/解码器,并使用纯字符串。非常容易调试,也可以进行单元测试...

关于json - Jersey /JAXB : Unmarshaling of empty json array results in a list with one item where all fields are set to null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3060059/

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