我在 Apache TomEE Web 配置文件 8.0.12 上部署了一个 Web 应用程序。 该应用程序公开了一个返回 json 的 Rest 服务。 TomEE 使用的默认库是 Johnzon。 我正在尝试使用 Jackson json 提供程序更改默认的 Johnzon json 提供程序。
为了测试提供程序的切换,我开发了一个休息服务,它返回一个带有两个字符串的类,并且使用 Jackson @JsonIgnore 注释忽略两个字符串之一。
public class PropContainer {
@JsonIgnore
private String prop1;
private String prop2;
...
以及返回 PropContainer 类的休息服务
@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 {
}
关于java - Apache TomEE Webprofile 8 - 无法将 Json Rest 提供程序从 Johnzon 更改为 Jackson,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73856720/