我所有的实体都继承自一个名为EntidadeBase的类:
@MappedSuperclass
public abstract class EntidadeBase implements Serializable {
private static final long serialVersionUID = -3912856473903279467L;
@Id
@QueryParam("id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
@PodamStrategyValue(value = NullStrategy.class)
private Long id;
@Column(name = "cadastro_data", nullable = false)
@PodamStrategyValue(value = PastDateStrategy.class)
private LocalDate dataCadastro;
@Column(name = "modificado_data", nullable = false)
@PodamStrategyValue(value = PastDateStrategy.class)
private LocalDate dataModificacao;
@QueryParam("modificado")
@Column(nullable = false)
@PodamBooleanValue(boolValue = false)
private Boolean modificado;
@QueryParam("ativo")
@Column(nullable = false)
@PodamBooleanValue(boolValue = true)
private Boolean ativo;
}
它是部署在tomcat 8上的JAX-RS / Jersey Web服务,实际上使用默认的Jersey impl进行POJO绑定:MOXy。
我的问题是,例如,当我发送带有JSON实体的PUT请求时,EntidadeBase字段未解析为我的EndPoint对象
这里是一个例子:
@PUT
@Override
@Transactional(qualifier = ForTransaction.class)
public Response atualizar(@NotNull Abrangencia entidade) {
return super.atualizar(entidade);
}
我如何设法使MOXy将JSON值解析为继承的超类的字段?
在花了一些时间尝试修复实体之后,我使用了另一个类似的原型进行了测试,该原型使用Wildfly 8.2 Impl来实现Java EE 7功能(RestEasy用于JAX-RS,而Jackson则用于Json-Pojo Bind)和相同的实体/资源/ repository原型,它就像一个魅力。然后我意识到问题出在MOXy,所以我将项目配置为使用Jackson。
我修改了pom.xml来替换它:
<!-- MOXy -->
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>${moxy.version}</version>
</dependency>
有了这个:
<!-- Jackson -->
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>${jackson.version}</version>
</dependency>
并将此init参数添加到我的web.xml中:
<servlet>
<servlet-name>jax-rs</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>org.glassfish.jersey.config.property.packages</param-name>
<param-value>com.fasterxml.jackson.jaxrs</param-value>
</init-param>
...
现在它可以工作了(-;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句