我有一个带数据的ajax调用:" {" timeLeft":12:33," cheked":true}"。在clienside timeleft格式:HH:MM,但在服务器端我们需要将其转换为毫秒(长)。如何使用MappingJackson2HttpMessageConverter? 在提交表单后的Spring中,我们可以使用PropertyEditors。杰克逊转换器中的json数据有类似之处吗?感谢
答案 0 :(得分:1)
MappingJackson2HttpMessageConverter
使用Jackson的ObjectMapper
从JSON反序列化为Pojos(或从JSON反序列化到Maps / JsonNodes)。因此,一种方法是创建一个作为反序列化对象的POJO。
如果预期的时间值是真的" HH:MM"在哪里" HH"实际上意味着一个小时(0-23)"和" MM"表示"小时(0-59)"然后可以使用以下方法。
将自定义@JsonCreator
添加到您的支持POJO:
public class TimeLeftPojo {
// The time pattern
private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm");
// The checked property
private final boolean checked;
// The parsed time
private final LocalTime timeLeft;
// A creator that takes the string "HH:mm" as arg
@JsonCreator
public static TimeLeftPojo of(
@JsonProperty("timeLeft") String timeLeft,
@JsonProperty("checked") boolean checked) {
return new TimeLeftPojo(
LocalTime.parse(timeLeft, formatter), checked);
}
public TimeLeftPojo(final LocalTime timeLeft, final boolean checked) {
this.timeLeft = timeLeft;
this.checked = checked;
}
public LocalTime getTimeLeft() {
return timeLeft;
}
public long toMillisecondOfDay() {
return getTimeLeft().toSecondOfDay() * 1000;
}
public boolean isChecked() {
return checked;
}
}
然后反序列化开箱即用:
ObjectMapper mapper = new ObjectMapper();
// Changed the spelling from "cheked" to "checked"
String json = "{\"timeLeft\": \"10:00\", \"checked\": true}";
final TimeLeftPojo timeLeftPojo = mapper.readValue(json, TimeLeftPojo.class);
System.out.println(timeLeftPojo.toMillisecondOfDay());
输出将是:
36000000
@JsonCreator
的JavaDoc可以be found here。
请注意,时间模式为" HH:mm",而不是" HH:MM"与在原始查询中一样(" M"是月份,而不是分钟)。
答案 1 :(得分:0)
你在服务器端有没有映射这个json的对象?也许你可以为这个字段使用JsonSerializer / JsonDeserializer的实现,并将时间转换为时间戳。