【发布时间】:2015-11-27 13:08:58
【问题描述】:
我遇到了一个问题,我想不通。
上下文
我有一个控制器:
@RestController
@RequestMapping("/classroom")
public class ClassroomController {
@Inject
private ClassroomManager classroomManager;
@RequestMapping(value= "", method = RequestMethod.POST)
public Classroom create(Classroom classroom) {
... some checks ...
return classroomManager.create(classroom);
}
}
一个模型类:
public class Classroom {
private Long id;
private final String name;
private final RoomCapacity roomCapacity;
private final Set<RoomEquipment> equipments = new HashSet<>();
[... No setter, No default constructor ...]
public Classroom(String name, RoomCapacity roomCapacity) {
[... some checks ...]
this.name = name;
this.roomCapacity = roomCapacity;
}
}
问题是,我无法以 JSON 格式发送带有 Classroom 的 POST 请求。
当我这样做时,我遇到了这个异常:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.ubp.ent.backend.core.model.classroom.Classroom]: No default constructor found; nested exception is java.lang.NoSuchMethodException: org.ubp.ent.backend.core.model.classroom.Classroom.<init>()
我的问题是什么
我确实理解错误,我可能会向该类添加一个默认构造函数。
但是Classroom 的观点来自模型,我不想允许默认实例化。
如何让 Spring 能够从 Json 构建?
【问题讨论】:
-
如果您不想在实体中使用默认构造函数,则需要添加服务 bean 以与视图交换数据
-
很抱歉,什么是服务 bean?我该如何实现?
-
我不记得它是什么,但我相信有一个 Jackson 注释可以应用于构造函数,告诉它使用该注释进行反序列化。
-
那是@JsonCreator 吗?
-
@chrylis 是的,我想通了,它可以工作。但是“reos”解决方案也很棒。
标签: json spring spring-boot