springboot:当从api返回的对象中不存在空值时,是否可以在运行时更改数据?

wgmfuz8q  于 2021-06-27  发布在  Java
关注(0)|答案(3)|浏览(495)

我有一个springboot应用程序,它正在访问数据源的原始api。现在假设我有一个客户实体,它有大约50个字段,我有一个原始api,我在其中传递列的名称,并获取该列的值。现在我在springboot中实现api,它使用原始api。
我需要在springboot中为客户实体的字段的不同组合实现不同的api,只返回在用户查询过的对象中设置的字段,并从对象中删除空值字段。一种方法是为客户实体列的不同组合实现不同的dto。有没有其他方法可以实现同样的功能,我不需要为spring boot中customer实体的不同列的不同组合定义不同的dto???

lymnna71

lymnna711#

您可以配置 ObjectMapper 直接或利用 @JsonInclude 注解:

mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
``` `OR` ```
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Customer {

    private Long id;
    private String name;
    private String email;
    private String password;

    public Customer() {
    }

    // getter/setter ..
}

您可以看到如何使用以下示例代码:

Customer customer = new Customer();
customer.setId(1L);
customer.setName("Vikas");
customer.setEmail("info@vikas.com");

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
String valueAsString = objectMapper.writeValueAsString(customer);

因为密码被留下了 null ,您将拥有一个不存在密码的对象。

{
  "id": 1,
  "name": "Vikas",
  "email": "info@vikas.com"
}
q7solyqu

q7solyqu2#

使用jackson 2.0序列化,您可以在不同级别的非空值上指定数据包含,即在对象Map器(带构造函数选项)、dto类或dto类字段(带注解)上。请参见此处的注解

lo8azlld

lo8azlld3#

这可以在dto类中使用@jsoninclude来完成。请参考下面的代码块以忽略空值。

@JsonInclude(Include.NON_NULL) // ignoring null values 
@Data //lombock
@Builder //builder pattern 
public class Customer {

    private Long id;
    private String name;
    private String email;
    private String password;
}

相关问题