当前位置:  开发笔记 > 前端 > 正文

如何绕过@JsonIgnore注释?

如何解决《如何绕过@JsonIgnore注释?》经验,为你挑选了1个好方法。

我正在尝试创建一个休息终点并使用Swagger作为UI表示.我使用它的pojo有一个带注释的变量 @JsonIgnore,如下所示.

@JsonIgnore
private Map property = new HashMap(); 

现在,当我提供JSON(具有属性值)到这个终点并试图读取它的值时,它就会出现null(由于@JsonIgnore).

pojoObj.getProperties(); //null

如果我可以在不删除@JsonIgnore注释的情况下获得属性值,有什么办法吗?



1> Sharon Ben A..:

这可以通过利用Jackson的Mixin功能来实现,您可以在其中创建另一个取消忽略注释的类.然后,您可以将mixin"附加"到ObjectMapper运行时:

这是我用过的POJO:

public class Bean
{
    // always deserialized
    public String name;

    // ignored (unless...) 
    @JsonIgnore
    public Map properties = new HashMap();
}

这是"其他"课程.它只是具有相同属性名称的另一个POJO

public class DoNotIgnore
{
    @JsonIgnore(false)
    public Map properties;
}

杰克逊模块用于将bean绑定到mixin:

@SuppressWarnings("serial")
public class DoNotIgnoreModule extends SimpleModule
{
    public DoNotIgnoreModule() {
        super("DoNotIgnoreModule");
    }

    @Override
    public void setupModule(SetupContext context)
    {
        context.setMixInAnnotations(Bean.class, DoNotIgnore.class);
    }
}

把它们捆绑在一起:

public static void main(String[] args)
{
    String json = "{\"name\": \"MyName\","
            +"\"properties\": {\"key1\": \"val1\", \"key2\": \"val2\", \"key3\": \"val3\"}"
            + "}";

    try {
        ObjectMapper mapper = new ObjectMapper();
        // decide at run time whether to ignore properties or not
        if ("do-not-ignore".equals(args[0])) {
            mapper.registerModule(new DoNotIgnoreModule());
        }
        Bean bean = mapper.readValue(json, Bean.class);
        System.out.println(" Name: " + bean.name + ", properties " + bean.properties);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有