当前位置: 首页 > 知识库问答 >
问题:

JAX-RS和CDI/@provider和beans.xml

咸高谊
2023-03-14

我做了一个使用JAX-RS(RESTfull服务)的简单项目

我有一个JAX-RS(RESTfull service)webservice项目,它部署到JBoss6.1中。默认情况下,JBoss6.1提供了与JSON集成的resteasy。我想更改默认JSON资源的日期格式。

    null
@Provider
@Produces("application/json")
public class MyJacksonJsonProvider extends JacksonJsonProvider {
    public static final String pattern = "YYYY-MM-dd'T'HH:mm:ss";

    @Override
    public void writeTo(Object value, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String,Object> httpHeaders, OutputStream entityStream) throws IOException, WebApplicationException {
        ObjectMapper mapper = locateMapper(type, mediaType);

        // Set customized date format
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        mapper.getSerializationConfig().setDateFormat(sdf);

        super.writeTo(value, type, genericType, annotations, mediaType, httpHeaders, entityStream);
    }
}

MyJacksonJsonProvider没有被调用,我仍然得到默认的JSON日期格式。

即使在pom.xml下添加以下依赖项也没有帮助:

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jaxrs</artifactId>
</dependency>
<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-cdi</artifactId>
    <version>2.2.1.GA</version>
</dependency>

有人知道为什么在“WebContent/WEB-INF”文件夹下有一个空的beans.xml时,会忽略MyJacksonJsonProvider吗?提前多谢!

仅供参考,这是示例模型类:

@XmlRootElement(name = "movie")
public class Movie {

    String name;
    String director;
    int year;
    Date date;

    @XmlElement
    public String getName() {
        return name;
    }

    public void setName(String name) {
       this.name = name;
    }

    @XmlElement
    public String getDirector() {
        return director;
    }

    public void setDirector(String director) {
        this.director = director;
    }

    @XmlAttribute
    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }

    @XmlElement
    public Date getDate() {
       return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

}

这是生成JSON资源的类:

@Path("/json/movie")
public class JSONService {

    @GET
    @Path("/get")
    @Produces("application/json")
    public Movie getMovieInJSON() {

        Movie movie = new Movie();
        movie.setName("Little flower");
        movie.setDirector("Zhang Zheng");
        movie.setYear(1979);
        movie.setDate(new Date());

        return movie; 

    }
}

共有1个答案

张岳
2023-03-14

我想我也遇到过这个。这是一个已知的问题(RESTEASY-555),如果不能将Resteasy升级到>=2.3.3,解决办法就是告诉Weld排除MyJacksonJsonProvider,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:weld="http://jboss.org/schema/weld/beans"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://docs.jboss.org/cdi/beans_1_0.xsd
                           http://jboss.org/schema/weld/beans http://jboss.org/schema/weld/beans_1_1.xsd">
  <weld:scan>
    <weld:exclude name="MyJacksonJsonProvider" />
  </weld:scan>
</beans>
 类似资料:
  • 问题内容: 我只是熟悉使用JAX-RS在Java中实现REST Web服务,因此遇到了以下问题。我的资源类之一要求访问存储后端,该后端在接口后被抽象化。我想将当前实例注入到服务REST请求的资源类中,并且我认为这样做的一种好方法是使用批注和适当的类。这是我到目前为止所拥有的: 在: 在: 我用来自动发现提供程序和资源类,并且根据日志,它很好地拾取了该类(故意遗漏了时间戳和不必要的内容): 但是,资

  • service.java: sqlDataProvider.java: 如果在Glassfish服务器中部署此servlet并执行请求,将引发以下异常: 亲切地问候帕斯卡

  • JAX-RS是否可以只使用带有注释的Servlet3.0(特别是Tomcat7)来实现,而不必实现另一个Servlet容器? 如果不是,请解释为什么下面这本书中的引用是不正确的,或者是我对它的解释是错误的。 因为此示例部署在Java EE应用程序服务器或独立的Servlet3.x容器中,所以我们只需要一个空的web.xml文件。服务器将检测到某个应用程序类在您的WAR中,并自动部署它。(带有JAX

  • 谁能给我解释一下什么是JAX-RS提供程序,以及'@Provider'注释做什么?我一直在阅读文档,但我没有得到它。 如果有资源类为传入的请求服务,提供者该怎么做?当我创建一个持久资源类(不是每个请求的资源类)时,它们与单例资源类有什么不同?或者这些类也是提供者?

  • 我一直漫游在互联网的深处,但我发现自己不满足于我所找到的例子到目前为止。有人能给我指点一下,或者给我演示一下,将zipkin跟踪与jaxrs客户机和amqp客户机集成在一起的一个好的起点吗? 我的场景是相当简单的,我希望这个任务是琐碎的TBH。我们有一个基于微服务的体系结构,是时候开始跟踪我们的请求了,我们有了服务间依赖关系的全局视角,以及请求的实际外观(我们有度量标准,但我想要更多!)通信是通过

  • 多年来,我一直试图让托米1.5.2 JAX-RS与杰克逊合作。我想我已经尝试了100种方法。 这是我的最后一次尝试: 我在conf/system.properties中添加了以下内容: 我在托米的 lib 文件夹中添加了: jackson-mapper-asl-1.9.12.jar jackson-core-asl-1.9.12.jar罐 jackson-jaxrs-1.9.12.jar 我在一个