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

SpringMVC强迫杰克逊只使用setters

都浩淼
2023-03-14

我有一个Spring MVC应用程序,它使用Jackson和@RequestBody注释。

我在POJO中有一个字段,我不想让Jackson映射,所以我让lombok将setter访问级别设置为NONE。

@NotNull
@Setter(AccessLevel.NONE)
private boolean enabled = false;

我试图通过配置为强制Spring的ObjectMapper bean仅使用setter:

@Bean
@Primary
public ObjectMapper getObjectMapper() {
    ObjectMapper mapper = new ObjectMapper();
    mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.NONE);
    return mapper;
}

我认为没有setter和字段的不可见性,Jackson不会映射“enabled”字段...但是如果我发送一个带有enabled设置为true的主体,

有人能建议我还需要做什么吗?

谢谢

共有1个答案

孙翰墨
2023-03-14

只需使用 @JsonProperty 注释字段并将访问权限设置为只读即可。

@JsonProperty(access = Access.READ_ONLY)
private boolean enabled;

PS.您不需要使用@NotNull进行注释或初始化为false,因为您使用的是基元类型。

 类似资料:
  • 我想使用Spring的RestTemplate plus Jackson来使用Web服务。我已经学习了几本教程,并且已经达到了创建DAO的目的。这是我获取所有域对象的方法: 但我的Web服务不会立即返回Station对象数组,而是以这种方式返回一个更具语义的表达式: 所以我的问题是,我不知道如何“告诉”RestTemplate在“stations”指示符之后立即解析对象列表,而不创建临时对象,这似

  • 问题内容: 我正在使用Jackson 1.8.3将以下域对象序列化和反序列化为JSON 然后使用以下代码对对象进行序列化和反序列化 然后用 对象的原始值为Strings,Doubles,Longs或Booleans。但是,在序列化和反序列化过程中,Jackson将Long值(例如4)转换为Integers。 如何“强制” Jackson将数字非十进制值反序列化为Long而不是Integer? 问题

  • 问题内容: 在Jersey上使用Jackson 处理器时,何时以及为何需要在两者之间使用注释? 杰克逊(Jackson)还提供了自己的服务提供商以直接使用。这种方法缺少什么?还是为什么我比其他人更喜欢 ps:我也用弹簧 问题答案: 为了生成JSON,通常只需指定即可。但是,这将默认采用JAXB路由。 使用Object-> JAXB-> JSON,您必须注释要映射的类。这可以很好地工作,但是一旦您要

  • 我如何告诉Jackson忽略JSON名称? 我有以下POJO: 当我有这样的东西: “ABCName”:“foo”,然后杰克逊没有认出它抛出错误。 它期望的是: “abcName”:“foo”。 代码: 输出:{"abcname":"Foo"} 然后我试着用@JsonProperty(“ABCName”)注释ABCName 在我注释并运行代码之后,我得到的是:{“ABCName”:“Foo”,“A

  • 首先,我不熟悉Jython。我正在寻找一种将python代码集成到Java项目中的方法。因此我正在调查Jython。 我正在尝试将一个 json 字符串转换为 Java 对象 - 在 python 中。 首先,我一直在努力让Jython找到我的java类。由于缺乏更优雅的解决方案,我可以通过简单地执行以下操作来向前迈进: 无论如何。。。 我正在尝试以下操作: 但是,在运行时,我收到以下错误: 我不

  • 问题内容: 我如何使用jackson像下面的示例那样创建json数组。 我尝试使用ObjectMapper,但这似乎不正确。 最终,我将制作一个具有以下值的json。 这是我提供的一个示例json。 编辑1 提出以下更接近的json,但我不知道为什么在{}之前和之后加引号。 最终答案 问题答案: 您需要一个: 此类具有创建s,s,s,s,s和诸如此类的方法。s和s具有便捷的变异方法,可以直接添加大