我有一个表单,我使用字段HashSet<char> valid = new HashSet<char>() {
'y', 'n', 'N', 'Y',
};
...
if (valid.Contains(myChar)) {
...
}
从LocalDate
映射的表单中接收值。
虽然JSON是:
Jackson
我的Tue Jun 27 2017 00:00:00 GMT+0200 (ora legale Europa occidentale)
变量为LocalDate
这是我的pojo:
2017-06-26
我已经介绍了杰克逊JDK8:
public class BookingForm {
private Integer building;
private Integer city;
private LocalDate date;
private String description;
private LocalTime endTime;
private List<Integer> externalUsers;
private List<Integer> internalUsers;
private String name;
private Room room;
private LocalTime startTime;
private List<ExternalUser> newExternalUsers;
//get and set method
<!-- Jackson dependencies -->
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-hibernate5</artifactId>
<version>${jacksondatatype.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
<version>${jacksondatatype.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>${jacksonjsr310.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-parameter-names</artifactId>
<version>${jacksondatatype.version}</version>
</dependency>
代替Date
一切正常
时区或其他什么问题?
更新: 这是我的Spring配置:
LocalDate
可以在这里配置吗?
答案 0 :(得分:0)
我认为你的杰克逊将使用GMT而你的BookingForm可能会使用像BST这样的其他东西来导致这个
答案 1 :(得分:0)
您需要使用反序列化器集添加JavaTimeModule
,并且此反序列化器必须具有DateTimeFormatter
(以解析输入)。
对于此测试,我创建了一个示例类:
public class JsonLocalDate {
private LocalDate date;
// getter/setter
}
然后:
String json = "{ \"date\": \"Tue Jun 27 2017 00:00:00 GMT+0200\" }";
ObjectMapper mapper = new ObjectMapper();
JavaTimeModule module = new JavaTimeModule();
// create formatter for the pattern
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
// append pattern
.appendPattern("EEE MMM dd yyyy HH:mm:ss 'GMT'Z")
// create formatter - use English Locale to parse weekday and month name
.toFormatter(Locale.ENGLISH);
// add the LocalDateDeserializer with the custom formatter
module.addDeserializer(LocalDate.class, new LocalDateDeserializer(formatter));
mapper.registerModule(module);
JsonLocalDate value = mapper.readValue(json, JsonLocalDate.class);
System.out.println(value.getDate());
输出结果为:
2017年6月27日