Có hai cách để đạt được điều này.
- Sử dụng Jackson Serializers - Để chuyển đổi toàn cầu. Áp dụng cho mọi chuyển đổi
- User Spring WebDataBinder và PropertyEditorSupport. Bạn có thể chọn bộ điều khiển nào cần chuyển đổi này
Triển khai bộ nối tiếp Jackson
Đăng ký lớp trên vào Học phần 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));
}
}
Thêm Serializer vào Jackson Module
@Configuration
public class JacksonConfiguration {
@Bean
public JodaModule jacksonJodaModule() {
final JodaModule module = new JodaModule();
module.addSerializer(DateTime.class, new CustomDateTimeSerializer());
return module;
}
}
Sử dụng API WebBinder và PropertyEditorSupport
Triển khai 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)));
}
}
}
Thêm PropertyEditor này vào Rest Controller
@RestController
@RequestMapping("/abc")
public class AbcController {
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(DateTime.class, new DateTimeEditor("yyyy-MM-dd", false));
}
}