我在Apache TomEE web概要文件8.0.12上部署了一个web应用程序。该应用程序公开了一个返回json的rest服务。TomEE中使用的默认库是Johnzon。我正在尝试用Jackson json提供程序更改默认的Johnzonjson提供器。
为了测试提供者的开关,我开发了一个rest服务,它返回一个带有两个字符串的类,并且使用Jackson@JsonIgnore注释忽略其中一个字符串。
public class PropContainer {
@JsonIgnore
private String prop1;
private String prop2;
...
以及返回PropContainer类的rest服务
@Path("config")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Stateless
public class PreferencesService {
@Path("get")
@GET
@JacksonFeatures(serializationEnable = { SerializationFeature.INDENT_OUTPUT })
public PropContainer get(){
...
调用服务后,json没有格式化(@JacksonFeatures被忽略(,prop1属性在响应中(Jackson@JsonIgnore注释被忽略(。我认为TomEE仍在使用Johnzon库。
阅读TomEE文档,更改json rest提供程序的步骤如下:
- 在src\main\webapp\WEB-INF下创建文件openejb-jar.xml\
- 在openejb-jar.xml文件中指定Jackson提供程序
<?xml version="1.0" encoding="UTF-8"?>
<openejb-jar xmlns="http://www.openejb.org/openejb-jar/1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openejb.org/openejb-jar/1.1">
<pojo-deployment class-name="jaxrs-application">
<properties>
cxf.jaxrs.providers = com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider
</properties>
</pojo-deployment>
</openejb-jar>
有什么建议吗?
感谢您的支持。
我想我已经找到了一个使用Provider注释创建类的解决方案。
opnejb-jar.xml不是必需的。
import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
import javax.ws.rs.Consumes;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.ext.Provider;
@Provider
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class MyDefaultJsonRestProvider extends JacksonJsonProvider {
}