我正在运行Jersey REST服务。代表我的资源的POJO是带有JAXB(XML)注释的简单Java类(它们是从模式定义生成的-因此具有注释)。
我希望Jersey /
Jackson忽略XML注释。我确实在我的web.xml这个配置(如提到这里):
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
我现在希望@XMLElement批注不再用于JSON字段命名策略。
但是看这个java领域(成员)
@XmlElement(name = "person", required = true)
protected List<Person> persons;
我仍然得到以下JSON表示形式:
....,"person":[{"name":"FooBar", ....... (person without the 's')
所有其他字段也仍然从@XmlElement批注中获取其JSON名称,而不是从Java字段名称中获取。
我想实现JSON输出,如Jackson
完整数据绑定(POJO)示例中所述。
在像这样的简单测试中(使用带XML注释的类),它可以正常工作:
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(System.out, myObject);
但是嵌入在Jersey中,我没有得到预期的JSON输出。
它们在Jersey中的其他配置选项是获得“简单”的POJO JSON表示形式(因为这最适合必须反序列化JSON结果的客户端)。
谢谢克劳斯
详细的解决方案
(1)ContextResolver
为Jacksons 实现一个,ObjectMapper
它创建一个不使用注释的ObjectMapper。
package foo.bar.jackson;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;
import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;
/**
* Customized {@code ContextResolver} implementation that does not use any
* annotations to produce/resolve JSON field names.
*/
@Provider
@Produces(MediaType.APPLICATION_JSON)
public class JacksonContextResolver implements ContextResolver<ObjectMapper> {
private ObjectMapper objectMapper;
/**
* Creates a new instance.
*
* @throws Exception
*/
public JacksonContextResolver() throws Exception {
this.objectMapper = new ObjectMapper().configure(
DeserializationConfig.Feature.USE_ANNOTATIONS, false)
.configure(SerializationConfig.Feature.USE_ANNOTATIONS, false);
;
}
/**
* @see javax.ws.rs.ext.ContextResolver#getContext(java.lang.Class)
*/
public ObjectMapper getContext(Class<?> objectType) {
return objectMapper;
}
}
(2)在您的application.xml中注册ContextResolver Spring bean
<bean class="foo.bar.jackson.JacksonContextResolver"/>
在低级别,需要执行什么操作以确保ObjectMapper不使用JAXBAnnotationIntrospector,而仅使用默认的JacksonAnnotationIntrospector。我认为您应该能够构造ObjectMapper(默认情况下不添加JAXB内省器),并通过标准JAX-
RS提供程序机制对其进行注册。这应该覆盖POJO映射器功能否则会构造的ObjectMapper。
问题内容: 我正在杰克逊1.6.2中使用REST Web服务/ ApacheWink。我如何注释枚举字段,以便Jackson对其进行反序列化? 内部阶层 Jackson的文档指出可以通过@JsonValue/来做到这一点,@JsonCreator但没有提供示例。 是否有人愿意像往常一样洒(java)bean? 问题答案: 如果您使用的是Jackson 1.9,则可以通过以下方式完成序列化: 因此,
我有一个Java8/Maven/Spring Boot项目。我使用Javers来审核应用程序中的更改,然而,我创建了一个自定义注释,它放在类中的字段上方,如果更改,我希望对其进行审核。下面是一个示例类:
问题内容: 我要呼吁汇率第三方API,但JSON返回不断变化,如果我申请到的转换,它将返回我:,所以如果我的要求来,它将返回我。 我将不得不使用将返回的结果映射到pojo中,是否有任何可行的方法? 我当前的硬编码解决方法: 问题答案: 是具有值的字段的对象。 否是with键/值对。 两者都是正确的,但是由于before的值是动态的(变化的),因此它是您需要的第二种解释。 因此,请勿要求将JSON转
我已经尝试创建自定义序列化程序,但我无法在那里获得字段名。 在GSON中,我使用了,但Jackson没有这样的功能。有对等的吗?
问题内容: 在golang中,有没有办法查看是否可以将解编入结构的json字段与设置为null的json字段区分开?因为两者都将struct中的值设置为nil,但是我需要知道字段是否以该字段开头,并查看是否有人将其设置为null。 VS 当解组为结构时,两个json均为零。任何有用的资源将不胜感激! 问题答案: 使用以“拖延”解组过程决定做某件事之前要确定原始字节: 参观游乐场https://pl
简介:我正在使用Java与Spring boot 2.2.2和Lombok 我得到了这个示例类: 我想拦截所有用@MyAnnotation注释的“get”/“set”方法的调用。为了管理这个,我创建了这个界面: 这个类做一些操作。 最后为了测试所有,我做了一个简单的控制器 我无法激活这些切入点,我不明白为什么。你能帮我吗? 我已经在StackOverflow上看到了一些类似的问题,比如:-带注释字