Jersey + Jackson を使用して、アプリケーションに REST JSON サービス レイヤーを提供しています。私が抱えている問題は、デフォルトの日付シリアル化形式が次のようになっていることです。
"CreationDate":1292236718456
最初は UNIX のタイムスタンプだと思っていましたが、長すぎます。私のクライアント側の JS ライブラリには、この形式を逆シリアル化する際に問題があります (さまざまな日付形式をサポートしていますが、これはサポートしていません)。ライブラリで使用できるようにフォーマットを変更したい(たとえば、ISOに)。どうすれば...私は助けることができるコードを見つけましたが...私はJacksonのシリアライザーのインスタンス化を制御していないので、どこに置くべきですか?
objectMapper.configure(
SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);
カスタム用のこのコードも見つけましたJacksonJsonProvider-問題は..すべてのPOJOクラスでそれを使用するにはどうすればよいですか?
@Provider
public class MessageBodyWriterJSON extends JacksonJsonProvider {
private static final String DF = "yyyy-MM-dd’T'HH:mm:ss.SSSZ";
@Override
public boolean isWriteable(Class arg0, Type arg1, Annotation[] arg2,
MediaType arg3) {
return super.isWriteable(arg0, arg1, arg2,
arg3);
}
@Override
public void writeTo(Object target, Class arg1, Type arg2, Annotation[] arg3,
MediaType arg4, MultivaluedMap arg5, OutputStream outputStream)
throws IOException, WebApplicationException {
SimpleDateFormat sdf=new SimpleDateFormat(DF);
ObjectMapper om = new ObjectMapper();
om.getDeserializationConfig().setDateFormat(sdf);
om.getSerializationConfig().setDateFormat(sdf);
try {
om.writeValue(outputStream, target);
} catch (JsonGenerationException e) {
throw e;
} catch (JsonMappingException e) {
throw e;
} catch (IOException e) {
throw e;
}
}
}