21

JBoss AS 7.1 を使用する JAX-RS アプリケーションがあり、日付 (java.util.Date) を含む JSON および XML オブジェクトを POST/GET します。

@XmlRootElement
@XmlAccessorType(XmlAccessField.FIELD)
public class MyObject implements Serializable
{
    @XmlSchemaType(name = "dateTime")
    private Date date;
    ...
}

get メソッドで @Produce("application/xml") を使用すると、オブジェクトが XML としてシリアル化され、日付が ISO-8601 文字列 (例: "2012-12-10T14:50:12.123+02:00") に変換されます。 )。

ただし、get メソッドで @Produce("application/json") を使用すると、JSON オブジェクトの日付は ISO-8601 文字列ではなくタイムスタンプ (例: "1355147452530") になります。

JSON 形式の日付をタイムスタンプではなく ISO-8601 文字列としてシリアル化するように JAX-RS 実装 (RESTEasy) を構成するにはどうすればよいですか?

回答ありがとうございます。

注: カスタム JAX-RS プロバイダーを使用して、日付の JSON シリアル化も試みました。

@Provider
@Produces(MediaType.APPLICATION_JSON)
public class CustomJsonDateProvider implements MessageBodyWriter<Date>
{
    ...
}

このプロバイダーは、JBoss の起動時に RESTeasy によって登録されているようです。

[org.jboss.jaxrs] Adding JAX-RS provider classes: package.CustomJsonDateProvider
...
[org.jboss.resteasy.cdi.CdiInjectorFactory] No CDI beans found for class package.CustomJsonDateProvider. Using default ConstructorInjector.

しかし、それは決して使用されません!

4

4 に答える 4

15

あなたのjsonパーサーはJacksonだと思います。試してみてください:

@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd,HH:00", timezone="CET")
public Date date;

(Jackson 2.0 以降)

于 2013-05-22T13:53:28.390 に答える