JodaTime에 대한 JSON의 잭슨 처리.
JodaTime:
클래스:
public class ExampleDto {
private LocalDateTime asDefault = LocalDateTime.now();
...
json 변환:
import com.fasterxml.jackson.databind.ObjectMapper;
...
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(new ExampleDto());
결과:
{"asDefault":{"era":1,"dayOfMonth":24,"dayOfWeek":6,"dayOfYear":24,"year":2015,"yearOfEra":2015,...}
보시다시피 RESTFUL이 잘 안 돼서 잘 처리가 안 돼요.
잭슨이 제공하는 방식, @LocalDateTime Serializer와 @LocalDateTime Deserializer
public class ExampleDto {
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
private LocalDateTime asArray = LocalDateTime.now();
이렇게 얻은 결과는:
{"asArray":[2015,1,24,10,31,3,379]}
여기서 알 수 있듯이 나는 자신의 Serializer를 맞춤형으로 만들 수 있다. 예를 들어 내가 얻고 싶은 것은 다음과 같다.
{"custom":
{"date":"2015-01-24",
"time":"10:31:03"
}
코드:
Class CustomLocalDateTimeSerializer
public class CustomLocalDateTimeSerializer extends StdScalarSerializer {
private final static DateTimeFormatter DATE_FORMAT = DateTimeFormat.forPattern("yyyy-MM-dd");
private final static DateTimeFormatter TIME_FORMAT = DateTimeFormat.forPattern("HH:mm:ss");
public CustomLocalDateTimeSerializer() {
super(LocalDateTime.class);
}
protected CustomLocalDateTimeSerializer(Class t) {
super(t);
}
@Override
public void serialize(LocalDateTime value, JsonGenerator jgen, SerializerProvider prov ider) throws IOException, JsonProcessingException {
jgen.writeStartObject();
jgen.writeStringField("date", DATE_FORMAT.print(value));
jgen.writeStringField("time", TIME_FORMAT.print(value));
jgen.writeEndObject();
}
}
Class CustomLocalDateTimeDeserializer
public class CustomLocalDateTimeDeserializer extends StdScalarDeserializer {
private final static DateTimeFormatter DATETIME_FORMAT = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
public CustomLocalDateTimeDeserializer() {
super(LocalDateTime.class);
}
protected LocalDateTimeDeserializerMongoDb(Class> vc) {
super(vc);
}
@Override
public LocalDateTime deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
String dateStr = null;
String timeStr = null;
String fieldName = null;
while (jp.hasCurrentToken()) {
JsonToken token = jp.nextToken();
if (token == JsonToken.FIELD_NAME) {
fieldName = jp.getCurrentName();
} else if (token == JsonToken.VALUE_STRING) {
if (StringUtils.equals(fieldName, "date")) {
dateStr = jp.getValueAsString();
} else if (StringUtils.equals(fieldName, "time")) {
timeStr = jp.getValueAsString();
} else {
throw new JsonParseException("Unexpected field name", jp.getTokenLocation());
}
} else if (token == JsonToken.END_OBJECT) {
break;
}
}
if (dateStr != null && timeStr != null) {
LocalDateTime dateTime = LocalDateTime.parse(dateStr + " " + timeStr, DATETIME_FORMAT);
return dateTime;
}
return null;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.