1

JAX-RS(RESTfullサービス)を利用した簡単なプロジェクトを作ってみました

JBoss AS 6.1 にデプロイする JAX-RS (RESTfull サービス) Web サービス プロジェクトがあります。JSON と統合された resteasy は、デフォルトで JBoss 6.1 AS によって提供されます。デフォルトの JSON リソースの日付形式を変更したいと考えていました。

私はインターネットから助けを得て、拡張するクラスを追加しましたJacksonJsonProvider:

@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);
    }
}

これは、CDI インジェクションのために WebContent/WEB-INF の下に空の beans.xml を追加するまではうまく機能します。

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>

MyJacksonJsonProvider「WebContent/WEB-INF」フォルダーの下に空の beans.xml がある場合、なぜ無視されるのか、誰にも分かりますか? よろしくお願いします!

参考までに、これはサンプル モデル クラスです。

@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; 

    }
}
4

1 に答える 1

1

私もこれに遭遇したと思います。これは既知の問題 (RESTEASY-555)であり、Resteasy を >= 2.3.3.Final にアップグレードできない場合の回避策は、次のように除外するように 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>
于 2012-05-29T21:08:12.597 に答える