假设我有一个域类:
public class Zoo{
private List<Animal> animals;
....
Run Code Online (Sandbox Code Playgroud)
其中Animal是具有不同实现的接口(Cat,Dog).假设我希望能够保存Zoo对象:
@RequestMapping(value = "/zoo", method = RequestMethod.POST)
public @ResponseBody void save(@RequestBody Zoo zoo) {
....
Run Code Online (Sandbox Code Playgroud)
我想发送一个json - 类似于:
{
animals:[
{type:'Cat', whiskers-length:'3'},
{type:'Dog', name:'Fancy'}
]
}
Run Code Online (Sandbox Code Playgroud)
当键入=='Cat'时,如何告诉spring MVC将动物映射到Cat类型,并在键入=='Dog'时将其映射到Dog类?
我正在尝试转换一些使用Jackson的@JsonSubTypes注释来管理多态的Java代码.
这是工作的Java代码:
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = Comment.class, name = "CommentNote"),
@JsonSubTypes.Type(value = Photo.class, name = "PhotoNote"),
@JsonSubTypes.Type(value = Document.class, name = "DocumentNote")
})
public abstract class Note implements Identifiable {
[...]
Run Code Online (Sandbox Code Playgroud)
这是我认为相当于的Kotlin代码:
JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
JsonSubTypes(
JsonSubTypes.Type(value = javaClass<Comment>(), name = "CommentNote"),
JsonSubTypes.Type(value = javaClass<Photo>(), name = "PhotoNote"),
JsonSubTypes.Type(value = javaClass<Document>(), name = "DocumentNote")
)
abstract class Note : Identifiable {
[...]
Run Code Online (Sandbox Code Playgroud)
但是我在三个"JsonSubTypes.Type"行中得到以下错误:
Kotlin: …Run Code Online (Sandbox Code Playgroud) 我的Spring/Hibernate应用程序中有一个模型类层次结构.
在向Spring MVC控制器提交POST表单时,是否有任何标准方法来指定所提交对象的类型,因此Spring可以实例化接收方法的@ModelAttribute或@RequestParam中声明的类型的正确子类?
例如:
public abstract class Product {...}
public class Album extends Product {...}
public class Single extends Product {...}
//Meanwhile, in the controller...
@RequestMapping("/submit.html")
public ModelAndView addProduct(@ModelAttribute("product") @Valid Product product, BindingResult bindingResult, Model model)
{
...//Do stuff, and get either an Album or Single
}
Run Code Online (Sandbox Code Playgroud)
Jackson可以使用@JsonTypeInfo注释将JSON反序列化为特定子类型.我希望Spring能做同样的事情.
各位,
这段代码被剪掉了:
@RequestMapping(method = RequestMethod.GET, produces = "application/json")
public ResponseEntity<List<Member>> findByMemberKeyOrUniqueMemberId(
Run Code Online (Sandbox Code Playgroud)
请注意,“Member”是一个接口,而不是一个类。
这是行不通的。
@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<String> save(@RequestBody final List<Member> members) {
Run Code Online (Sandbox Code Playgroud)
所以我可以将 Members 转换为 JSON,但无法将 JSON 接收为 Members。如果我将保存的参数从列表更改为成员类之一的列表,那么它可以正常工作,但它确实会弄乱我的代码。
我怎样才能解决这个问题?