将对象转换为json字符串时忽略属性,但将字符串转换为Jackson库使用的对象时不忽略属性[重复]

6za6bjd0  于 2022-11-19  发布在  其他
关注(0)|答案(1)|浏览(157)
    • 此 问题 在 此处 已有 答案 * * :

Only using @JsonIgnore during serialization, but not deserialization ( 9 个 答案 )
Jackson: how to prevent field serialization [duplicate] ( 9 个 答案 )
8 天 前 关闭 。
我 有 一 个 REST API , 它 提供 了 一 个 JSON 。 在 我 从 REST API 接收 到 的 json 中 , 有 一 个 ID 属性 , 我 想 读取 它 , 以便 对 它 进行 一些 检查 。 但是 , 当 我 想 写 回 Web 服务 器 时 , ID 属性 不能 出现 在 响应 JSON 字符 串 中 。 因此 , 它 必须 是 一 个 只 写 属性 。但是 简单 地 将 属性 更改 为 只 写 会 阻止 检查 该 属性 的 值 。
例如 , 我 创建 了 一 个 新 产品 :

public class Product {
    
    //This feild should not be ignore when I convert JSON to object. 
    // But the same one should be ignore when I convert the object to Json
    @JsonProperty
    public String id;
    
    @JsonProperty
    public String name;
   
}

中 的 每 一 个
GET 响应 :

{
  "id": 1,
  "name": "Product1"
}

格式
POST 错误 :

{
  "id": 1, <-- This should be in the response
  "name": "Product1"
}

格式
POST 应该 是 :

{
  "name": "Product1"
}

格式

ha5z0ras

ha5z0ras1#

要防止某个字段被序列化,可以通过将@JsonProperty注解的access属性赋给JsonProperty.Access.WRITE_ONLY来使用该属性。

public static class Product {
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    public String id;
    public String name;
    
    // getters, setters
}
  • 用法示例:*
String incomingJson = """
    {
        "id": 1,
        "name": "Product1"
    }
    """;
        
Product product = mapper.readValue(incomingJson, Product.class);
String result = mapper.writeValueAsString(product);
System.out.println(result);
  • 输出:*
{"name":"Product1"}

相关问题