1 回答

TA貢獻1836條經驗 獲得超4個贊
我可以在 Instant 字段上使用 Jackson 注釋,還是可以設置屬性來應用這種行為?還是自定義解串器是我唯一的選擇?
我個人并不知道可以為您開箱即用的注釋;但以下是一個簡單的反序列化器,可以完成這項工作:
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 格式的字符串(如果字符串未相應格式化,它將拋出一個)并根據其表示創建一個。然后您可以使用 tell jackson 使用此轉換器以下列方式反序列化您的 DTO 的屬性:DateTimeParseExceptionInstantInstant
public class MyDTO {
@JsonDeserialize(using = JacksonInstantDeserializer.class)
public Instant instant;
}
GitHub 上的完整代碼
希望這可以幫助。
添加回答
舉報