1 回答

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊
我可以在 Instant 字段上使用 Jackson 注釋,還是可以設(shè)置屬性來應(yīng)用這種行為?還是自定義解串器是我唯一的選擇?
我個(gè)人并不知道可以為您開箱即用的注釋;但以下是一個(gè)簡(jiǎn)單的反序列化器,可以完成這項(xiàng)工作:
import java.io.IOException;
import java.time.Instant;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
public class JacksonInstantDeserializer extends StdDeserializer<Instant> {
public JacksonInstantDeserializer() { this(null); }
public JacksonInstantDeserializer(Class<?> clazz) { super(clazz); }
@Override
public Instant deserialize(JsonParser parser, DeserializationContext ctx) throws IOException {
return Instant.parse(parser.getText());
}
}
它基本上使用Instant.parse;它只接受ISO-8601 格式的字符串(如果字符串未相應(yīng)格式化,它將拋出一個(gè))并根據(jù)其表示創(chuàng)建一個(gè)。然后您可以使用 tell jackson 使用此轉(zhuǎn)換器以下列方式反序列化您的 DTO 的屬性:DateTimeParseExceptionInstantInstant
public class MyDTO {
@JsonDeserialize(using = JacksonInstantDeserializer.class)
public Instant instant;
}
GitHub 上的完整代碼
希望這可以幫助。
添加回答
舉報(bào)