gpt4 book ai didi

java - 传递到 Jersey + Jackson 时从实体中删除字段

转载 作者:行者123 更新时间:2023-12-02 05:05:24 26 4
gpt4 key购买 nike

我正在使用 Jersey + Jackson(内置于 Dropwizard)来创建一系列 Web 服务。我通过将 Json 中的对象传递给 Jersey 中的 Response 对象来直接映射它们:

myObject object = new myObject(fields...);
return Response.ok(object).build();

使用 JsonProperty("fieldName") 在 myObject 类中正确注释字段。

但是,如果我有一个需要存储到数据库的字段(例如:密码哈希),但我不想传递请求响应,那么在将实体传递给响应对象时如何删除该字段?

我无法使用 JsonIgnore 注释该字段,否则当我将 Json 映射到数据库(ElasticSearch)时,该字段根本不会被序列化。

最佳答案

一种选择是简单地将字段设置为null。要配置ObjectMapper在字段为空时完全忽略JSON中的字段,您可以这样做

@Override
public void run(YourConfiguration configuration,
Environment environment) throws Exception {
...
environment.getObjectMapper().setSerializationInclusion(Include.NON_NULL);
}

顺便说一句,这个安全原因是使用 DTO(数据传输对象)的原因之一,DTO 是一个额外的实体“ View ”层,它将我们发送的表示与持久层(数据库实体对象)分开。创建另一个具有相同/相似属性的对象似乎是多余的,但安全填充是值得的。

此外,虽然尚未正式发布,Dropwizard 0.8.0使用 Jersey 2,其中引入了 Entity Filtering ,这使我们能够过滤掉不想发送的数据,而无需创建 DTO。只是想我会提到它。

关于java - 传递到 Jersey + Jackson 时从实体中删除字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27842169/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com