これを実現するには2つの方法があります。
- JacksonSerializersを使用する-グローバル変換用。すべての変換に適用されます
- ユーザーSpringWebDataBinderおよびPropertyEditorSupport。この変換が必要なコントローラーを選択できます
Jacksonシリアライザーを実装する
上記のクラスをジャクソンモジュールに登録する
public class CustomDateTimeSerializer extends JsonSerializer<DateTime> {
// Customize format as per your need
private static DateTimeFormatter formatter = DateTimeFormat
.forPattern("yyyy-MM-dd'T'HH:mm:ss");
@Override
public void serialize(DateTime value, JsonGenerator generator,
SerializerProvider serializerProvider)
throws IOException {
generator.writeString(formatter.print(value));
}
}
ジャクソンモジュールにシリアライザーを追加する
@Configuration
public class JacksonConfiguration {
@Bean
public JodaModule jacksonJodaModule() {
final JodaModule module = new JodaModule();
module.addSerializer(DateTime.class, new CustomDateTimeSerializer());
return module;
}
}
WebBinderAPIとPropertyEditorSupportを使用する
PropertyEditorSupportを実装する
public class DateTimeEditor extends PropertyEditorSupport {
private final DateTimeFormatter formatter;
public DateTimeEditor(String dateFormat) {
this.formatter = DateTimeFormat.forPattern(dateFormat);
}
public String getAsText() {
DateTime value = (DateTime) getValue();
return value != null ? value.toString(formatter) : "";
}
public void setAsText( String text ) throws IllegalArgumentException {
if ( !StringUtils.hasText(text) ) {
// Treat empty String as null value.
setValue(null);
} else {
setValue(new DateTime(formatter.parseDateTime(text)));
}
}
}
このPropertyEditorをRESTコントローラーに追加します
@RestController
@RequestMapping("/abc")
public class AbcController {
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(DateTime.class, new DateTimeEditor("yyyy-MM-dd", false));
}
}