我在Moxy上使用Jersey 2.17,并且具有以下功能:
@Produces(APPLICATION_JSON)
@Restricted
public List<User> getFriends(
@PathParam("user") String user
) {
return userDAO.getFriends(user);
}
User.preferences是一个HashMap
。
除了将a HashMap
转换为:
“ preferences”:{“ entry”:[{“ key”:{“ type”:“ string”,“ value”:“ language”},“
value”:{“ type”:“ string”,“ value”: “ en”}},{“ key”:{“ type”:“ string”,“
value”:“ country”},“ value”:{“ type”:“ string”,“ value”:“ US”} }]}
但我真正想返回的只是一个JavaScript对象,例如:
偏好设置:{“ language”:“ en”,“ country”:“ US”}
我怎样才能做到这一点?
是的,MOXy和地图效果不佳。可悲的是,JSON只不过是映射的键/值对。如果要使用MOXy,则需要使用XmlAdapter
。在这种情况下,您需要JSON的方式将需要创建一个具有所有可能的首选项名称的类型(类)。任意的键值对
应该 是您所需要的形式,但因为莫西不能做地图,您需要将其映射到自己的类型。例如
public class PreferencesAdapter extends XmlAdapter<Preference, HashMap<String, String>> {
@XmlRootElement
public static class Preference {
public String language;
public String country;
}
@Override
public HashMap<String, String> unmarshal(Preference p) throws Exception {
HashMap<String, String> map = new HashMap<>();
map.put("language", p.language);
map.put("country", p.country);
return map;
}
@Override
public Preference marshal(HashMap<String, String> v) throws Exception {
Preference p = new Preference();
p.language = v.get("language");
p.country = v.get("country");
return p;
}
}
您的DTO
@XmlRootElement
public class User {
@XmlJavaTypeAdapter(PreferencesAdapter.class)
public HashMap<String, String> preferences;
}
但是,如果我们要做所有这些事情,为什么不Preferences
首先使用一个对象而不是一个对象Map
呢?这是一个反问。我完全理解您为什么不这样做。但这是MOXy的局限性之一,因为它使我们不堪重负,而JAXB却从未与Map很好地配合使用,这令人遗憾,就像我说的那样,JSON实际上仅是键值Map
。
因此,即使过去我也遇到过许多其他原因,即使泽西岛推荐使用MOXy,我也不建议使用。而是使用Jackson。杰克逊(Jackson)成为JSON处理的事实上的Java
goto已有一段时间了。对于杰克逊,只需使用此依赖项
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>${jersey.version}</version>
</dependency>
如果删除了MOXy依赖项,则此Jackson模块应该可以解决问题。否则,如果您离开MOXy依赖项,则需要注册JacksonFeature
我正在使用泽西2.17和Moxy,我有如下功能: user.preferences是。 “首选项”:{“entry”:[{“key”:{“type”:“string”,“value”:“language”},“value”:{“type”:“string”,“value”:“en”}},{“key”:{“type”:“string”,“value”:“country”},“value”:“coun
我正在使用Jersey Web services(2.23),并将POJO映射用于JSON到对象的映射(Jersey-media-moxy)。我创建了一个类,如下所示: 我希望该对象的实例具有以下结构:
问题内容: 如何从Java Servlet返回JSON对象。 以前,当使用servlet执行AJAX时,我返回了一个字符串。是否有需要使用的JSON对象类型,或者你只是返回了一个看起来像JSON对象的String,例如 问题答案: 我完全按照你的建议去做(返回a )。 不过,你可能会考虑将MIME类型设置为指示你正在返回JSON(根据其他stackoverflow文章,其为“ applicatio
有没有任何方法来实现我所需要的,“值”字段的变量类型值?
问题内容: 我不知道如何用代码返回JSON数据。 JS C#的Default.aspx.cs 提前致谢! 问题答案: 你不远 您需要执行以下操作: 您可以进一步减少此代码,但为清晰起见,我将其保留下来。实际上,您甚至可以这样写: 这将返回一个json字符串。我宁愿更加明确,因为我使用自定义转换器。也有Json.net,但是框架的工作开箱即可。
问题内容: 所以我有一个简单的Web服务: 书的类也很简单: 现在,当您在浏览器的测试器中调用此Web服务时,我得到: 是否有可能将返回的 HashMap 对象显示在标记中,例如 我想要返回标签中的值的原因是,从客户端来看,我在网页中使用jQuery AJAX调用此Web服务,而我得到的响应XML只是空标签。我如何从AJAX客户端获得真实的账面价值? 这是我的AJAX网络代码: 我使用简单的Hel