我有一个对象通过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对象.
通过这种方式,您将更加灵活,并且不会将对象转移到实际的实体模型.
如果您使用 lombok 但没有明确定义 getter/setter,也没有像我的情况那样定义 getter/setter,也可能会发生这种情况@Builder,原因是@Data构建器使用空构造函数首先创建一个空对象,然后使用 setter 来设置属性。
| 归档时间: |
|
| 查看次数: |
7207 次 |
| 最近记录: |