泽西岛和杰克逊日期格式问题

时间:2019-03-05 16:34:09

标签: json jackson jersey jax-rs

在和Jersey&Jackson进行反序列化JSON日期时遇到一些问题

我有一个课程,例如Item:

public class Item {
    @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd")
    private Date itemDate;

    // other String values and getters/setters
}

端点如下:

@Path("/createItem")
@POST
@Produces({MediaType.APPLICATION_JSON})
@Consumes(MediaType.APPLICATION_JSON)
public Response newItem(Item i) {
    System.out.println(i.getItemDate());
}

如果我发布以下JSON数据

{
    "itemDate": "2015-03-01"
}

i.getItemDate()始终返回null。除非我使用默认的日期格式yyyy-MM-dd'T'HH:mm:ss.SSS'Z',否则我试图将格式更改为yyyy-MM-dd,但是我无法执行此操作。我已经按照本网站上的示例尝试使用自定义类@JsonDeserialize

还有一点值得注意,当使用自定义@JsonDeserializer时,它将永远不会碰到自定义类中的任何断点,就像它忽略了注释一样,例如

 @JsonDeserialiser(using = MyCustomDateFormat.class) 

如果我在CustomJsonDateDeserializer中有一个断点,它将永远不会受到打击。

public class CustomJsonDateDeserializer extends JsonDeserializer<Date> {
    @Override
    public Date deserialize(JsonParser jsonParser,
                            DeserializationContext deserializationContext) throws IOException {

        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String date = jsonParser.getText();
        try {
            return format.parse(date);
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }

    }
}

我是否需要做其他事情来注册反序列化处理程序,或者它是否可以与上述方法之一一起工作?

0 个答案:

没有答案