相关疑难解决方法(0)

Spring @RequestBody包含不同类型的列表(但是相同的接口)

假设我有一个域类:

    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类?

java spring json spring-mvc

18
推荐指数
2
解决办法
9304
查看次数

如何在Kotlin中使用Jackson JsonSubTypes注释

我正在尝试转换一些使用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)

jackson kotlin

16
推荐指数
3
解决办法
4728
查看次数

抽象类和Spring MVC @ ModelAttribute/@ RequestParam

我的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能做同样的事情.

java inheritance binding spring-mvc jackson

10
推荐指数
1
解决办法
5330
查看次数

Spring MVC @RequestBody 进入接口而不是类

各位,

这段代码被剪掉了:

@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。如果我将保存的参数从列表更改为成员类之一的列表,那么它可以正常工作,但它确实会弄乱我的代码。

我怎样才能解决这个问题?

java spring spring-mvc jackson

3
推荐指数
1
解决办法
5507
查看次数

标签 统计

jackson ×3

java ×3

spring-mvc ×3

spring ×2

binding ×1

inheritance ×1

json ×1

kotlin ×1