【问题标题】:Apache TomEE Webprofile 8 - Unable to Change JSon Rest Provider from Johnzon to JacksonApache TomEE Webprofile 8 - 无法将 JSon Rest Provider 从 Johnzon 更改为 Jackson
【发布时间】:2022-09-27 18:11:47
【问题描述】:

我在 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>
    

    有什么建议么?

    谢谢你的支持。

    标签: java json jackson apache-tomee tomee-8


    【解决方案1】:

    我想我找到了一个使用 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 {
        
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-20
      • 1970-01-01
      • 2021-06-07
      • 1970-01-01
      • 1970-01-01
      • 2020-12-26
      • 1970-01-01
      相关资源
      最近更新 更多