java - Apache TomEE Webprofile 8 - 无法将 Json Rest 提供程序从 Johnzon 更改为 Jackson

标签 java json jackson apache-tomee tomee-8

我在 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 提供程序的步骤是:

  1. 在 src\main\webapp\WEB-INF\下创建文件 openejb-jar.xml
  2. 在 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/

相关文章:

Java float 学 - (英尺/米的转换)

java - 如何获取 ActiveMQ - 单个发送方和接收方的 FIFO 要求?

java - 试图从带有 JSON 的 PHP 返回数据到 Android.....

java - 如何在 Tomcat 下使用 Jersey 2.7 和 Jackson 2.0 配置 RESTful 服务

java - 与 Jackson 在 Jersey 中使用强类型进行 Hibernate 验证

java - Jackson 中自定义序列化的公认做法是什么?

java - PyCharm 无法连接到网关后面的远程(java.net.UnknownHostException)

Java 对象 : value for comparison in if statement, 运算符重载

python - JSON 获取嵌套字典中的键路径

javascript - 使用 json 调用 webService 在 Titanium 中出错,但使用 curl 从终端调用 webService 工作正常