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;

    }

}

 



  • 2021-01-22 22:01:19

    Emscripten Compiler Frontend (emcc)

    The Emscripten Compiler Frontend (emcc) is used to call the Emscripten compiler from the command line. It is effectively a drop-in replacement for a standard compiler like gcc or clang.

  • 2021-01-22 22:21:41

    emcc编译命令介绍

    这个输入文件file,既可以是clang可以编译的C/C++语言,也可以是二进制形式的llvm bitcode或者人类可读形式的llvm assembly文件。

  • 2021-01-22 22:25:51

    How to protect your JS code by WebAssembly

    对于iOS或是Android来说,我们可以将相关的算法通过C/C++进行编写,然后编译为dylib或是so并进行混淆以此来增加破解的复杂度,但是对于前端来说,并没有类似的技术可以使用。当然,自从asm.js及WebAssembly的全面推进后,我们可以使用其进一步增强我们核心代码的安全性,但由于asm.js以及WebAssembly标准的开放,其安全强度也并非想象中的那么美好。

  • 2021-01-24 09:50:16

    UICollectionViewCell cell高度自适应

    本来想使用UICollectionView来作为整体的布局,并且不再使用UITableView,但是发现高度不固定的布局,UICollectionView没啥优势呀,至少我没找到好的方法,从网上看的是,要自定义cell,并且继承preferredLayoutAttributesFittingAttributes