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

使用spring忽略Jackson中的无效值

艾文斌
2023-03-14

我使用Spring框架从GET请求接收JSON。所有的工作都很好,直到在DB中输入了一个错误的值,发生了以下情况:

02-25 14:46:04.035:E/AndroidRuntime(12271):org.springframework.http.converter.httpmessagenotreadableException:无法读取JSON:无法从字符串值“-3600”构造java.util.Date实例:无效表示(错误:无法解析日期值“-3600”:无法解析日期“-3600”:与任何标准形式(“yyyy-mm-dd”t“hh:mm:ss.ssz”,“yyyy-mm-dd”t“hh:mm:ss.sss”z“,”eee,dd MMM yyyy hh:mm:ssszz“,”

如何设置Jackson忽略不可读/可解析的值?我宁愿有null左右也不愿我的完整json解析失败...

这里是我试图解析到的对象,您可以看到,我试图在代码中使用jsonignoreproperties忽略属性。

收据:

public class Receipt {

    public String categories;


    @JsonProperty("expiration_date")
    public Date expirationDate;

    public String image1;

    public String image2;
(..  more properties, getters and setters ..)
RestTemplate restTemplate = new RestTemplate();


    // instellen dat de converter ongedefineerde parameters negeert
    HttpMessageConverter customconver = new MappingJackson2HttpMessageConverter();
    ((MappingJackson2HttpMessageConverter) customconver).getObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); //here the ignore unknown

    restTemplate.getMessageConverters().add(customconver);
    restTemplate.getMessageConverters().add(new StringHttpMessageConverter());
    try {
    // GET Request
    ResponseEntity<ReceiptMessage> response = restTemplate.exchange(urlPath, HttpMethod.GET,requestEntity,ReceiptMessage.class);

共有1个答案

盖和洽
2023-03-14

ObjectMapper上有一个名为write_dates_as_timestamps的设置。这会导致日期序列化为长而不是字符串,因此禁用它以获取字符串。您绝对应该阅读以下内容:http://wiki.fasterxml.com/jacksonfaqdatehandling

如果您不想这样做,要忽略基于某种逻辑的字段,只需为需要很长时间的日期字段添加一个setter并自己解析它。您可能需要使用@jsonsetter(“expiration_date”)对其进行注释,以便Jackson知道在其中传递它。

最后,Java日期/日历API被公认为是非常可怕的,在任何可能的情况下都应该避免使用。如果您使用的是Java8,那么新的日期/时间API要好得多。如果您是Java8之前的版本,请使用jodatime。甚至有专门的Jackson模块来处理它。

 类似资料:
  • 我正在用java中的jackson构建一个json体。它会像下面这样 基于不同的 REST URI,json 主体必须忽略某些字段或元素。如何使用杰克逊忽略上述 json 正文中的“学生”部分?当我忽略它时,我应该只能得到 但我得到它如下,这是不正确的- 我有两个带有getters和setters的类,一个作为主语,另一个作为学生。我尝试使用@JsonIgnore,但是它忽略了所有的URI,这是我

  • 问题内容: 当我发送此请求时: 我的休息服务: 我期望得到一个例外,因为: 我的域模型中没有invalidField。 日期格式无效。 但是实际上我得到的测试对象具有空值。我的dmain模型是: 我认为这不是有效的行为。我该如何解决? 感谢帮助。 解: 正如Blaise Doughan所说,需要扩展MOXy的MOXyJsonProvider并重写preReadFrom方法以设置自定义javax.x

  • 这是我的东西 当我得到响应时,我看到 我的看起来像 问题 如何消除中的值?

  • 我试图使用Jackson注释来重新命名序列化过程中产生的一些json标签。所有注释都编译得很好,当我运行时,除了所有Jackson注释之外,Jackson序列化工作完全被忽略。即使像@jsonignore或@jsonproperty这样的基本命令对json响应也没有影响。构建路径中的库有: 下面是我需要序列化的一个类的代码示例:

  • 在Spring MVC中,我需要将空字符串()视为。这是因为我发现,当我编辑一个表单字段(带有Angular的ng-model),该字段最初是,然后将其擦除为空白时,Angular将以空字符串的形式发送该bean属性。如果我不接触这样的null值,它将不会在JSON有效负载中发送,因此被视为null。