如何在Java中为POJO的每个单独字段执行数据类型验证?

xuo3flqw  于 2023-03-16  发布在  Java
关注(0)|答案(1)|浏览(140)

我有一个请求POJO类,它包含所有字符串数据类型字段。当我必须将它们存储到DB时,数据类型必须准确。考虑到我需要验证并将我的每个单独的POJO字段转换为相应的数据类型。此外,请求POJO可能包含200多个字段。我如何验证和转换我的每个字段?这是我的请求POJO看起来像-〉

@Data
public class ProductRequest {

    private String goodScore;
    private String invalidScore;
    private String income;
    private String salary;
    private String updatedOn;

}

这是我的响应POJO应该看起来像,这些是我实际上需要存储在DB -〉中的类型

@Builder
@Data
public class ProductResponse {
    
    private Integer goodScore;
    private Integer invalidScore;
    private Float income;
    private Double salary;
    private LocalDate updatedOn;

}

这就是我如何尝试和实施-〉

public class ProductImplement {

    public static void main(String[] args) {

        ProductRequest request = new ProductRequest();

        try {
        ProductResponse.builder()
                .goodScore(!StringUtils.hasLength(request.getGoodScore()) ? Integer.parseInt(request.getGoodScore())
                        : null)
                .income(!StringUtils.hasLength(request.getIncome()) ? Float.parseFloat(request.getIncome()) : null)
                .invalidScore(
                        !StringUtils.hasLength(request.getInvalidScore()) ? Integer.parseInt(request.getInvalidScore())
                                : null)
                .salary(!StringUtils.hasLength(request.getSalary()) ? Double.parseDouble(request.getSalary()) : null)
                .updatedOn(
                        !StringUtils.hasLength(request.getUpdatedOn()) ? LocalDate.parse(request.getUpdatedOn()) : null)
                .build();
        
        }catch(Exception e) {
            e.printStackTrace();
        }

    }

}

因此,如果值不为Null,则解析类型并设置。否则,将字段值设置为Null。但是,在这种情况下,如果在解析时发生任何异常,则整个对象返回Null,对于200个以上的字段执行此操作会非常麻烦。

是否有任何框架来验证单个数据类型,即使在例外情况下,我们也需要忽略该字段并继续解析其他字段?如果我不必使用Respone POJO,也可以。欢迎提出任何建议。

请提出建议。提前感谢!

ssgvzors

ssgvzors1#

您可以使用@NotNull@NotBlank@MinLength@MaxLength
javax.validation应用程序接口
为确保验证,请在***控制器***级别使用@Validated,在***属性***级别使用@Valid

附文参考!

https://www.baeldung.com/spring-valid-vs-validated
Difference between @Valid and @Validated in Spring
这将避免手动验证,并从此删除样板代码:)

相关问题