相关疑难解决方法(0)

如何阻止Jackson序列化多态类型的注释属性?

我有多态类型和反序列化从JSON到POJO的工作.事实上,我遵循了这里的文档.将POJO序列化为JSON时,我得到了一个不需要的属性,特别是逻辑类型名称.

import static org.codehaus.jackson.annotate.JsonTypeInfo.*;

@JsonTypeInfo(use=Id.NAME, include=As.PROPERTY, property="type")
@JsonSubTypes({
    @JsonSubTypes.Type(value=Dog.class, name="dog"),
    @JsonSubTypes.Type(value=Cat.class, name="cat")
})    
public class Animal { ... }

public class Dog extends Animal { ... }
public class Cat extends Animal { ... }
Run Code Online (Sandbox Code Playgroud)

当Jackson序列化为JSON时,它提供了我不想公开的类型信息.

{"type":"dog", ... }
{"type":"cat", ... }
Run Code Online (Sandbox Code Playgroud)

我能以某种方式阻止这种情况吗 我只想type在反序列化时忽略.

java json jackson

14
推荐指数
2
解决办法
1万
查看次数

Jackson @JsonSubTypes的替代方案

Jackson框架提供了基于注释的方法,用于在序列化过程中发出类型信息.

我不想在我的超类(Animal)中使用@JsonSubTypes注释.

相反,我想告诉我的SubClasses,即狗和大象,动物是他们的父母.

是否有任何方法可以在不使用Animal类中的注释的情况下执行此操作.

如果是,请提供如果可能的话做同样的例子.

以下是我试图解决的情况."测试"接收的JSON,包含"类型"字段为"狗"或"大象".

我想将这两个类注册为"Animal"类的子类型,但不想在Animal中使用@JsonSubTypes.

任何帮助,将不胜感激.提前致谢.

@JsonTypeInfo( use = JsonTypeInfo.Id.NAME,  include = JsonTypeInfo.As.PROPERTY, property = "type")
abstract class Animal(){
      private String sound;
      private String type;

     //getters and setters

}

@JsonTypeName("dog")
Class Dog extends Animal(){
     //some attributes.
     //getters and setters
}

@JsonTypeName("elephant")
Class Elephant extends Animal(){
     //some attributes.
     //getters and setters
}


@Controller
public class MyController {

    //REST service
    @RequestMapping( value = "test")
    public  @ResponseBody String save(@RequestBody  Animal animal){

    System.out.println(animal.getClass());
    return success;

    }
}
Run Code Online (Sandbox Code Playgroud)

java json spring-mvc jackson

9
推荐指数
1
解决办法
4824
查看次数

标签 统计

jackson ×2

java ×2

json ×2

spring-mvc ×1