我正在开发一个使用Spring-boot,关系数据库和Elasticsearch的应用程序。
我在代码的2个不同位置使用JSON序列化:
我在Elasticsearch中需要一些属性,但我想向应用程序用户隐藏(例如,来自关系数据库的内部ID)。
这是一个实体的例子:
@Document
public class MyElasticsearchEntity {
@Id
private Long id; //I want to hide this to the user.
private String name;
private String description;
}
问题
:当对象持久化在Elasticsearch中时,它会序列化为JSON。因此,@JsonIgnore
当序列化到Elasticsearch时,将忽略带有的字段。
到目前为止,我发现了2个令人不满意的解决方案:
解决方案1 :@JsonProperty
像这样使用:
@Id
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private Long id;
将id
被写在Elasticsearch和JSON响应是无效:
{
"id" : null,
"name" : "abc",
"description" : null
}
这样就可以了,但是应用程序用户仍然看到此属性存在。太乱了
解决方案2 :将对象映射器裁切以忽略空值
Spring-boot有一个内置选项:
spring.jackson.serialization-inclusion=NON_NULL
问题:它抑制所有非空属性,不仅抑制那些我想忽略的属性。假设description
先前实体的字段为空,则JSON响应将为:
{
"name" : "abc"
}
这对于UI来说是有问题的。
那么有没有办法仅在JSON响应中忽略此类字段?
您可以将Jackson
JsonView
用于您的目的。您可以定义一个视图,该视图将用于为应用程序用户序列化pojo:
创建一个类,一个公共和一个私有视图:
class Views {
static class Public { }
static class Private extends Public { }
}
然后将Pojo中的视图用作注释:
@Id
@JsonView(Views.Private.class) String name;
private Long id;
@JsonView(Views.Public.class) String name;
private String publicField;
然后使用视图为应用程序用户序列化pojo:
objectMapper.writeValueUsingView(out, beanInstance, Views.Public.class);
这是关于视图如何适合您的问题的许多其他示例。例如。您也可以使用它objectMapper.configure(SerializationConfig.Feature.DEFAULT_VIEW_INCLUSION, false);
来排除没有视图注释的字段并删除Private
视图。
问题内容: 我正在某个网站上插入一些标题中的换行符。假设我无法编辑源HTML,是否有CSS可以忽略这些中断的方法? 我正在移动网站的优化,所以我真的不想使用JavaScript。 问题答案: 使用css,您可以“隐藏” br标签,它们不会起作用: 如果只想在特定的标题类型中隐藏某些内容,只需使CSS更具体即可。
问题内容: 这是我的实体: 这是我获得人员名单的方式: 如果我正确理解提取图,则它必须仅加载我指定的那些字段。但是,字段“ birthDate”也已加载。此外,我看到在hibernateSQL查询中选择了4列。 如何解决?我使用hibernate 5.1.0作为JPA提供程序。 问题答案: 实体图旨在控制延迟或渴望加载哪些关系(例如,一对一,一对多等)。它们可能不适用于加载各个列(取决于提供程序)
由于某些原因,我无法将CURL与HTTPS一起使用。在我升级curl库之前,一切都很正常。现在,我在尝试执行CURL请求时遇到了这种响应:SSL CA证书(路径?访问权限?)有问题 以下是关于相关问题的建议,我试图做到以下几点: > 启用并指向从http://curl.haxx.se/docs/caextract.html下载的cacert.pem 我也试着用positiveSSL做同样的事情。c
我在一些字段上有@NotNull注释。然而,当我尝试生成diffChangelog时,它会删除所有非空约束 示例类: 差异集: 唯一的解决方案似乎是在每个字段上添加一个额外的注释@列(nullable=false)。我可以做任何事情,这样我就不必在每个字段上添加额外的注释。
如果某个接口不需要进行验证工作,可以在@Api注解上设置属性ignoreValidate=true(默认false)。这样调用接口时,不会进行验证操作。 同样的,在@ApiService注解里也有一个对应的ignoreValidate属性,设置为true的话,Service类下面所有的接口都忽略验证。 忽略所有接口验证 设置ApiConfig.setIgnoreValidate(true),所有接
忽略域名 您可能要从mitmproxy的拦截机制中免除部分流量的主要原因有两个: 证书固定:使用证书固定保护某些流量, 而mitmproxy的拦截会导致错误。例如,如果mitmproxy处于活动状态,则Twitter应用程序,Windows Update或Apple App Store无法工作。 便利性:您实际上并不关心某些流量,而只是希望它们消失。请注意,在这里,mitmproxy的Limit选