当前位置: 首页 > 知识库问答 >
问题:

Jackson dynamic Pojo沙漠化

薛宇
2023-03-14

拥有像下一个这样的动态POJO:

@JsonInclude(JsonInclude.Include.NON_NULL)
public class MyDynamicWrapper <T> {

    @JsonProperty("header")
    private CommonHeader header;

    @JsonProperty("payload")
    private T payload;

    public MyDynamicWrapper(CommonHeader header, T payload) {
        super();
        this.header = header;
        this.payload = payload;
    }

    public CommonHeader getHeader() {
        return header;
    }

    public void setHeader(CommonHeader header) {
        this.header = header;
    }

    public T getPayload() {
        return payload;
    }

    public void setPayload(T payload) {
        this.payload = payload;
    }
}

其中T有效负载可以是以下之一:

@JsonInclude(JsonInclude.Include.NON_NULL)
public class MyPayloadOne {

    @JsonProperty("status")
    private int status; 

    @JsonProperty("action")
    private String action;  

    ...
}

@JsonInclude(JsonInclude.Include.NON_NULL)
public class MyPayloadTwo {

    @JsonProperty("properties")
    private List<String> properties = new ArrayList<>();    

    ...
}
MyDynamicWrapper pojo = jacksonMapper.readValue(jsonMessage, MyDynamicWrapper.class);
MyDynamicWrapper<?> pojo = jacksonMapper.readValue(jsonMessage, MyDynamicWrapper.class);

共有1个答案

皇甫俊雅
2023-03-14

您可以(并且应该)向readvalue传递一个TypeReference来指定要反序列化的泛型类实例的类型。例如。包装MypayLoadOne时:

TypeReference ref = new TypeReference<MyDynamicWrapper<MyPayloadOne>>(){};
MyDynamicWrapper<MyPayloadOne> pojo = jacksonMapper.readValue(jsonMessage, ref);
 类似资料:
  • 安全是Chromium最重要的目标之一。安全的关键在于理解下面这点:在我们完整地理解了系统在所有可能的输入组合下表现出的行为之后,我们才能够真的保证系统安全。对于像Chromium这样庞大而多样化的代码库,推理它的各个部分可能的行为的组合几乎是不可能的。沙箱的目标是提供这样一种保证:不论输入什么,保证一段代码最终能或不能做的事情。 沙盒利用操作系统提供的安全性,允许不能对计算机做出持久性改变或者访

  • Jinja2 沙箱用于为不信任的代码求值。访问不安全的属性和方法是被禁止的。 假定在默认配置中 env 是一个 SandboxedEnvironment 实例,下面的代码展示 了它如何工作: >>> env.from_string("{{ func.func_code }}").render(func=lambda:None) u'' >>> env.from_string("{{ func.fu

  • Jinja2 沙箱用于为不信任的代码求值。访问不安全的属性和方法是被禁止的。 假定在默认配置中 env 是一个 SandboxedEnvironment 实例,下面的代码展示 了它如何工作: >>> env.from_string("{{ func.func_code }}").render(func=lambda:None) u&"" title="jinja2.sandbox.Security

  • 我编写了一个简单的RMI服务器,并为它提供了一个默认的: 以下是服务器的代码(来自Oracle RMI教程,但我添加了RMISecurityManager): } 我这样做:

  • 什么是沙箱? 沙箱是一个允许沙箱进程创建的C++库,沙箱进程是一种运行在非常限制性的环境中的进程。沙箱进程可以唯一自由使用的资源是CPU周期和内存。例如,沙箱进程不能写磁盘或者显示他们自己的窗口。它们真正能做的事情由一种明确的策略锁控制。Chromium渲染器都是沙箱化进程。 沙箱可以保护什么,不能保护什么? 沙箱限制了运行在沙箱中的代码的bug的危害。这些bug不能在用户的账号中安装持久性的恶意

  • Chromium的一个关键安全特性是,进程可以在沙盒中执行。 沙盒通过限制对大多数系统资源的访问来减少恶意代码可能造成的伤害 — 沙盒化的进程只能自由使用CPU周期和内存。 为了执行需要额外权限的操作,沙盒处的进程通过专用通信渠道将任务下放给更大权限的进程。 在Chromium中,沙盒化应用于主进程以外的大多数进程。 其中包括渲染器进程,以及功能性进程,如音频服务、GPU 服务和网络服务。 查阅C