相关疑难解决方法(0)

如何获得Spring 4.1使用的Jackson ObjectMapper?

Spring 4.1实例化了一个Jackson ObjectMapper实例.我有理由希望@Autowire将该实例放入我的一个控制器中:控制器使用Jackson对其自己进行一些小的JSON解析,但ObjectMapper它使用的应该是Spring本身正在使用的同一个实例.我该如何完成呢?

请注意,我不是问如何自定义ObjectMapperSpring正在使用的配置; 我对默认值感到满意.我只想捕获Spring使用的实例,以便我可以在我自己的代码中重用现有实例.

java spring json spring-mvc jackson

43
推荐指数
5
解决办法
5万
查看次数

使用@JsonSubTypes反序列化没有值 - 缺少属性错误

我像这样反序列化jsons:

{
  "type":"a",
  "payload" : {...}
}
Run Code Online (Sandbox Code Playgroud)

有效负载类型取决于类型.我的课:

public class Sth<T extends Payload> {

    @JsonProperty("type")
    private String type;
    @Valid
    private T payload;

    @JsonTypeInfo(
        use = JsonTypeInfo.Id.NAME,
        include = JsonTypeInfo.As.EXTERNAL_PROPERTY,
        property = "type",
        visible = true,
        defaultImpl = NoClass.class)
    @JsonSubTypes({
        @JsonSubTypes.Type(value = APayload.class, name = "a"),
        @JsonSubTypes.Type(value = BPayload.class, name = "b"),
        @JsonSubTypes.Type(value = CPayload.class, name = "c")})
    public void setPayload(T payload) {
    this.payload = payload;
    }

    public void setType(String type) {
    this.type = type;
    }

}
Run Code Online (Sandbox Code Playgroud)

我也输入了没有负载的"d".如果我尝试反序列化:

{
  "type":"d",
  "payload" …
Run Code Online (Sandbox Code Playgroud)

java json jackson

10
推荐指数
2
解决办法
5888
查看次数

默认情况下使用Jackson解析为子类

我有一个名为Product的类和一些扩展它的子类.现在在我的注释中我有很多类型,如下所示:

@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.WRAPPER_OBJECT)
@JsonSubTypes({@Type(value=RoomProduct.class, name="RoomProduct"),
           @Type(value=GroundProduct.class, name="GroundProduct"),
           })
Run Code Online (Sandbox Code Playgroud)

然后是我的Product类的定义.我想要做的是,如果杰克逊不能发现该领域不符合任何这些结构,那么返回

UnknownProduct

我怎么能用Jackson @Type注释做到这一点?它应该是在名称中留空或者某些我不知道的值的标志(我已经尝试创建扩展Product的UnknownProduct并且在名称值中没有任何内容但没有成功.

java subtype jackson

6
推荐指数
1
解决办法
6750
查看次数

当返回类型是标记接口时使用Jackson的多态序列化

我有一个返回标记接口的休息服务,这个接口有多个实现,并且在实现中没有任何公共属性.

    @RequestMapping(value = "/users/{userName}", method = RequestMethod.GET)
    public User getUser(@PathVariable("userName") String userName) {
        return userService.getUser(userName);
    }
Run Code Online (Sandbox Code Playgroud)

用户及其实现.注意:用户是标记界面.

public interface User {}

public AdminUser implements User { // some properties & its setters & getters } 

public SupportUser implements User { // some properties & its setters & getters } 
Run Code Online (Sandbox Code Playgroud)

我使用Jackson 1.9.1来序列化和反序列化.

当我达到以上服务时,我的回答低于响应

{}
Run Code Online (Sandbox Code Playgroud)

当我调试它时,我看到用户实现对象已准备好并发送回Jackson进行序列化.但杰克逊正在向浏览器发送空响应.任何人都建议如何在返回类型为标记接口时使用序列化.

rest spring-mvc jsonserializer jackson

4
推荐指数
1
解决办法
6645
查看次数

标签 统计

jackson ×4

java ×3

json ×2

spring-mvc ×2

jsonserializer ×1

rest ×1

spring ×1

subtype ×1