是否有用于用户输入的 Java 格式化库?

Is there a Java formatting library for user input?

这似乎是几乎任何 Java 项目中都需要的一件非常普遍的事情。然而我找不到任何可以达到这个目的的东西。

我曾经使用一个名为 Stripes Framework 的 Web 框架,它具有注释驱动的验证器和通过其验证器自动格式化 API。

示例:

@Validate(maxlength = ModelConstants.NAME_MAX_LENGTH, converter = CapitializeFullyTypeConverter.class)
private String name;

@Validate(maxlength = ModelConstants.NAME_MAX_LENGTH, converter = EmailTypeConverter.class)
private String email;

这些字段将在您的控制器操作 bean 上定义,所有用户输入将根据指定规则自动验证和格式化。

如果有人将他们的电子邮件地址输入为:"TEST@TEST.COM" 然后它会自动格式化为:"test@test.com"

我想找到类似这样的东西来自动格式化 DTO 中的数据。

如果没有类似的东西,通常的处理方式是什么?想必大家都不会在DTO里面为每个getter写自定义格式化函数吧?

如果您使用 Spring Mvc,您可以访问格式 API。 org.springframework.format.annotation 包中有预先存在的日期和数字格式注释。

如果您需要自定义格式规则,您可以自己编写并通过 FormattingConversionServiceFactoryBean 注册。

在此处查看一些示例:https://docs.spring.io/spring-framework/docs/3.2.0.RC1/reference/html/validation.html

假设:“格式化程序”的含义为 type-converter

当您要求 基于注释的“格式化程序” 时,您的意思是 Stripe Framework's @Validate annotation with its parameter converter转换器可以参数化为:

(class) The converter class that will be used to transform this parameter into its object representation

在 Web-MVC 上下文中,这意味着 转换器 用于转换请求参数,即其 源值 ,如由传入的网络请求提供。 转换后的值然后作为目标值存储到(DTO)对象的属性.

示例:(DTO) 字符串的转换

Web 请求与参数名称电子邮件 和值字符串TEST@EXAMPLE.COM 一起给出。这应该被转换为小写并存储在 DTO 的 属性(a.k.a 属性或字段)email 作为值 test@example.com.

Spring DTO 注释

Spring Framework 还使用了 request validationrequest 的概念转换。它还允许在 DTO 或 类 及其属性上配置这些注解驱动。

验证 利用 Java Bean 验证标准 (JSR-303) javax.validation 注释,如 @Valid@Length

conversionHttpConverters 的一部分,用于 serialization/deserialization of responses/requests to/from对象(DTO)。因此 Spring 允许包含 对象关系映射器 (ORM) 框架或库作为(例如 Maven)依赖项。这些带来了关于与他们对话的自己的注释。

Fasterxml 的杰克逊

Jackson (ORM) 例如使用注释 @JsonFormat 来实现简单的字符串转换——但仅适用于非字符串字段,如 Date Number(据我所知)。 它还允许通过注释 @JsonSerialize@JsonDeserialize 完全自定义序列化器和反序列化器。 请注意,尽管 Jackson 中的许多注释都以“Json”命名,但它们大多也适用于 XML 甚至其他数据格式(表示形式),如 CSV 等

使用 Jackson 将字符串转为小写

您的问题是针对 Jackson 提出的: 并已回答。

另见