当前位置: 首页 > 知识库问答 >
问题:

JSON序列化自定义格式的日期(无法从字符串值构造java.util.date的实例)

龚鸿羽
2023-03-14
could not read JSON: Can not construct instance of java.util.Date from String 
value '2012-07-21 12:11:12': not a valid representation("yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "EEE, dd MMM yyyy HH:mm:ss zzz", "yyyy-MM-dd"))

将json请求传递给POJO类中的REST控制器方法。用户应该只输入以下的datetime格式,否则它应该抛出消息。为什么DateSerializer没有调用?

add(@Valid @RequestBody User user)
{
}

JSON:

{
   "name":"ssss",
   "created_date": "2012-07-21 12:11:12"
}

pojo类变量

@JsonSerialize(using=DateSerializer.class)
@Column
@NotNull(message="Please enter a date")      
@Temporal(value=TemporalType.TIMESTAMP)
private Date created_date;

public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
    logger.info("serialize:"+value);
    DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    logger.info("DateSerializer formatter:"+formatter.format(value));
    jgen.writeString(formatter.format(value));
}

共有1个答案

松琦
2023-03-14

我也有同样的问题,所以我用@jsondeserialize(using=customerdateandtimedeserialize.class)编写了一个自定义的日期反序列化

public class CustomerDateAndTimeDeserialize extends JsonDeserializer<Date> {

    private SimpleDateFormat dateFormat = new SimpleDateFormat(
            "yyyy-MM-dd HH:mm:ss");

    @Override
    public Date deserialize(JsonParser paramJsonParser,
            DeserializationContext paramDeserializationContext)
            throws IOException, JsonProcessingException {
        String str = paramJsonParser.getText().trim();
        try {
            return dateFormat.parse(str);
        } catch (ParseException e) {
            // Handle exception here
        }
        return paramDeserializationContext.parseDate(str);
    }
}
 类似资料: