是否有用于用户输入的 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 validation 和 request 的概念转换。它还允许在 DTO 或 类 及其属性上配置这些注解驱动。
验证 利用 Java Bean 验证标准 (JSR-303) javax.validation
注释,如 @Valid
和 @Length
。
conversion 是 HttpConverters 的一部分,用于 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 提出的: 并已回答。
另见
这似乎是几乎任何 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 validation 和 request 的概念转换。它还允许在 DTO 或 类 及其属性上配置这些注解驱动。
验证 利用 Java Bean 验证标准 (JSR-303) javax.validation
注释,如 @Valid
和 @Length
。
conversion 是 HttpConverters 的一部分,用于 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 提出的: