Spring:使用REST服务发布新对象时的类型定义错误

ffu*_*tes 2 java rest spring

我有一个对象通过json POST请求获取两个参数,以在数据库中创建一个新条目,我收到此错误:

"类型定义错误:[简单类型,类ffuentese.rest_example.Persona];嵌套异常是com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造实例ffuentese.rest_example.Persona(没有创建者,如默认构造,存在):无法反序列化对象值(没有基于委托或属性的Creator)位于[Source:(PushbackInputStream); line:2,column:3]",

这是对象:

@Entity
public class Persona {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;
    private String nombre;
    private String apellido;



    public Persona(String nombre, String apellido) {

        this.nombre = nombre;
        this.apellido = apellido;
    }
    public Integer getId() {
        return id;
    }

    public String getNombre() {
        return nombre;
    }
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
    public String getApellido() {
        return apellido;
    }
    public void setApellido(String apellido) {
        this.apellido = apellido;
    }


}
Run Code Online (Sandbox Code Playgroud)

这是控制器方法:

@PostMapping(path="/persona")
public @ResponseBody String addPersona(@RequestBody Persona p) {
    personaRepository.save(p);
    return "success";

}
Run Code Online (Sandbox Code Playgroud)

Ari*_*tex 12

你需要一个空构造函数来允许Jackson正确执行它的反序列化操作.

而且,使用实体模型作为数据传输对象并不是一个好主意.我建议创建一个PersonaDto包含构建对象所需的所有字段,并使用Spring converter将其转换为Persona对象.

通过这种方式,您将更加灵活,并且不会将对象转移到实际的实体模型.


Har*_*cha 5

如果您使用 lombok 但没有明确定义 getter/setter,也没有像我的情况那样定义 getter/setter,也可能会发生这种情况@Builder原因@Data构建器使用空构造函数首先创建一个空对象,然后使用 setter 来设置属性。