spring post jackson的反序列化需要无参构造函数

2019-09-26 19:03:33

引言

在测试spring boot 的post传递实体类的过程中发现了一个反向序列化的异常。


异常

JSON parse error: Cannot construct instance of `com.**` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `com.**` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator)

 at [Source: (PushbackInputStream); line: 2, column: 2]]

 


解决方案

在实体类中添加无参构造函数。


 


原因

jackson的反序列化需要无参构造函数,而我在实体类中添加了有参数的构造函数。


在实体类中添加无参构造函数即可。


 


修改前

 

import com.baomidou.mybatisplus.annotation.TableField;

import com.baomidou.mybatisplus.annotation.TableId;

import com.baomidou.mybatisplus.annotation.TableName;

import lombok.Data;

 

import java.io.Serializable;

 

@Data

@TableName("user")

public class User implements Serializable {

 

    @TableId("id")

    private String id;

    @TableField("user_id")

    private String userId;

    @TableField("device_id")

    private String deviceId;

 

    public User(String deviceId) {

        this.deviceId= deviceId;

    }

}

修改后

 

import com.baomidou.mybatisplus.annotation.TableField;

import com.baomidou.mybatisplus.annotation.TableId;

import com.baomidou.mybatisplus.annotation.TableName;

import lombok.Data;

 

import java.io.Serializable;

 

@Data

@TableName("user")

public class User implements Serializable {

 

    @TableId("id")

    private String id;

    @TableField("user_id")

    private String userId;

    @TableField("device_id")

    private String deviceId;

 

    public User() {

        super();

    }

 

    public User(String deviceId) {

        this.deviceId= deviceId;

    }

}

 



  • 2020-04-01 10:15:11

    vue-cli3.0中vue.config.js的基本配置(去除esLint提示和解决build后静态文件路径报错)

    vue-cli是开发vue项目必不可少的脚手架工具,3.0版本之前的目录结构是由config目录的,关于webpack配置的文件都放在该目录里面,而3.0版本之后做了一个大更新,webpack相关的默认配置都帮你集成到webpack的npm 包里面去了,官方提供的一种修改配置的方式就是开发者自己在项目的根目录(与src同层级的目录)下建立一个vue.config.js的文件,然后去覆盖自定义的配置,达到你想要的效果,下面写一个基本的默认配置

  • 2020-04-01 10:21:20

    Vue extend $mount 构造器详解

    本节介绍两个 Vue.js 内置但却不常用的 API——extend 和 $mount,它们经常一起使用。不常用,是因为在业务开发中,基本没有它们的用武之地,但在独立组件开发时,在一些特定的场景它们是至关重要的。

  • 2020-04-01 15:36:52

    CSS3中的transition属性详解

    transition: property duration timing-function delay transition属性是个复合属性,她包括以下几个子属性: transition-property :规定设置过渡效果的css属性名称 transition-duration :规定完成过渡效果需要多少秒或毫秒 transition-timing-function :指定过渡函数,规定速度效果的速度曲线 transition-delay :指定开始出现的延迟时间