Day07

文章介绍了在Java后端处理JSON反序列化时遇到的异常,以及如何通过使用`@JsonIgnoreProperties(ignoreUnknown=true)`注解来忽略未知属性,避免反序列化失败。另外,针对前端传入的非标准日期字符串导致的LocalDateTime转换异常,文章提出了使用`@DateTimeFormat`注解指定日期格式的解决方案。
摘要由CSDN通过智能技术生成

目录

1、使用@JsonIgnoreProperties

2、前端日期字符串转换LocalDateTime异常


1、使用@JsonIgnoreProperties

在做项目时把前端的JSON对象转为dto对象时,出现了异常

Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unrecognized field "showOption" (class org.example.entity.DishFlavor), not marked as ignorable; nested exception is com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "showOption" (class org.example.entity.DishFlavor), not marked as ignorable (9 known properties: "value", "updateUser", "dishId", "updateTime", "createUser", "createTime", "id", "isDeleted", "name"])<EOL> at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 262] (through reference chain: org.example.dto.DishDto["flavors"]->java.util.ArrayList[0]->org.example.entity.DishFlavor["showOption"])]

意思是Json对象中出现了showOption属性,但是对应的dto对象中没有这个属性,并且showOption属性没有被marked as ignorable,所以反序列化失败

解决方法如下,在反序列化类上添加@JsonIgnoreProperties(ignoreUnknown = true)

作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。将这个注解写在类上之后,就会忽略类中不存在的字段。

@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public class DishFlavor implements Serializable {

    private static final long serialVersionUID = 1L;

    private Long id;
    .....
}

2、前端日期字符串转换LocalDateTime异常

前端没有采用Json格式发送,而是字符串。SB就不会使用Jackson中的消息转换器,对时间字符串进行转换,并且SB的转换器默认转换格式为:yyyy-MM-dd T HH:mm:ss,所以无法转换成指定格式

 解决方法如下:在参数上添加@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss"),指明时间格式。

@GetMapping("/page")
    public Result<Object> getCategorys(@RequestParam("page") int page, @RequestParam("pageSize") int pageSize,String number, 
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime beginTime,
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime endTime) {

        Page<OrdersDto> page1 = PageHelper.startPage(page, pageSize);
        List<OrdersDto> list = orderService.selectOrders(number, beginTime, endTime);
        PageInfo<OrdersDto> pageInfo = new PageInfo<>(list);
        HashMap<String, Object> map = new HashMap<>();
        map.put("records",list);
        map.put("total", page1.getTotal());
        return Result.success(map);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值