java - Spring:使用 REST 服务发布新对象时出现类型定义错误
问题描述
我有一个对象,它通过 json POST 请求获取两个参数以在数据库中创建一个新条目,我收到此错误:
“类型定义错误:[简单类型,类 ffuentese.rest_example.Persona];嵌套异常是 com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造实例
ffuentese.rest_example.Persona
(没有创建者,如默认构造,存在):无法反序列化[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;
}
}
这是控制器方法:
@PostMapping(path="/persona")
public @ResponseBody String addPersona(@RequestBody Persona p) {
personaRepository.save(p);
return "success";
}
解决方案
您需要一个空的构造函数以允许 Jackson 正确执行其反序列化操作。
此外,使用实体模型作为数据传输对象并不是一个好主意。我建议创建一个PersonaDto
包含为对象构造所需的所有字段,并使用 Springconverter
将其转换为Persona
对象。
这样,您将更加灵活,并且您不会将对象绑定到实际的实体模型。
推荐阅读
- python - 如何使用 Python 将文件夹添加到 Windows PATH?
- r - 在 ggplot 图例中手动定位标签
- java - @After 和 @AfterStep 的黄瓜依赖关系是什么?
- c# - 当我尝试存根重载的构造函数时,NSubstitute 崩溃
- javascript - 带有链接的多个模式
- php - Laravel 加入最新的 pressureMap 入口
- drag-and-drop - Flutter / FireStore 是否有“正确”的类或方法来重新排序从 Firestore 数据库创建的 ListTiles
- android - opencv3.3.0:未定义对 cv::imwrite 的引用 - android
- php - 如何在codeigniter中访问stdclass对象内的stdclass对象
- visual-studio - devenv 和 msdev 命令在 Windows Server 2016\2012 上是否兼容?