doc: format

pull/80/head
huifer 4 years ago
parent a0deb46405
commit a3187e02a0

@ -0,0 +1,63 @@
# Spring DateTimeFormatAnnotationFormatterFactory
- 类全路径: `org.springframework.format.datetime.DateTimeFormatAnnotationFormatterFactory`
- 类图
![EmbeddedValueResolutionSupport](/images/spring/DateTimeFormatAnnotationFormatterFactory.png)
```java
public class DateTimeFormatAnnotationFormatterFactory extends EmbeddedValueResolutionSupport
implements AnnotationFormatterFactory<DateTimeFormat> {
/**
* 字段类型
*/
private static final Set<Class<?>> FIELD_TYPES;
@Override
public Set<Class<?>> getFieldTypes() {
return FIELD_TYPES;
}
@Override
public Printer<?> getPrinter(DateTimeFormat annotation, Class<?> fieldType) {
return getFormatter(annotation, fieldType);
}
@Override
public Parser<?> getParser(DateTimeFormat annotation, Class<?> fieldType) {
return getFormatter(annotation, fieldType);
}
protected Formatter<Date> getFormatter(DateTimeFormat annotation, Class<?> fieldType) {
DateFormatter formatter = new DateFormatter();
// style
String style = resolveEmbeddedValue(annotation.style());
// 判断时间格式是否村子啊
if (StringUtils.hasLength(style)) {
formatter.setStylePattern(style);
}
// iso 设置
formatter.setIso(annotation.iso());
// date time pattern
String pattern = resolveEmbeddedValue(annotation.pattern());
// 设置
if (StringUtils.hasLength(pattern)) {
formatter.setPattern(pattern);
}
return formatter;
}
static {
Set<Class<?>> fieldTypes = new HashSet<>(4);
// 加入字段类型
fieldTypes.add(Date.class);
fieldTypes.add(Calendar.class);
fieldTypes.add(Long.class);
FIELD_TYPES = Collections.unmodifiableSet(fieldTypes);
}
}
```

@ -0,0 +1,29 @@
# Spring DateTimeParser
- 类全路径: `org.springframework.format.datetime.joda.DateTimeParser`
- 代码如下
```java
public final class DateTimeParser implements Parser<DateTime> {
private final DateTimeFormatter formatter;
/**
* Create a new DateTimeParser.
* @param formatter the Joda DateTimeFormatter instance
*/
public DateTimeParser(DateTimeFormatter formatter) {
this.formatter = formatter;
}
@Override
public DateTime parse(String text, Locale locale) throws ParseException {
// DateTimeFormatter 转换字符串事件类型
return JodaTimeContextHolder.getFormatter(this.formatter, locale).parseDateTime(text);
}
}
```

@ -0,0 +1,28 @@
# Spring MillisecondInstantPrinter
- 类全路径: `org.springframework.format.datetime.joda.MillisecondInstantPrinter`
```java
public final class MillisecondInstantPrinter implements Printer<Long> {
private final DateTimeFormatter formatter;
/**
* Create a new ReadableInstantPrinter.
* @param formatter the Joda DateTimeFormatter instance
*/
public MillisecondInstantPrinter(DateTimeFormatter formatter) {
this.formatter = formatter;
}
@Override
public String print(Long instant, Locale locale) {
// DateTimeFormatter .print
return JodaTimeContextHolder.getFormatter(this.formatter, locale).print(instant);
}
}
```

@ -0,0 +1,42 @@
# Spring AnnotationFormatterFactory
- 类全路径: `org.springframework.format.AnnotationFormatterFactory`
```java
public interface AnnotationFormatterFactory<A extends Annotation> {
/**
* The types of fields that may be annotated with the &lt;A&gt; annotation.
* 字段类型
*/
Set<Class<?>> getFieldTypes();
/**
* Get the Printer to print the value of a field of {@code fieldType} annotated with
* {@code annotation}.
* <p>If the type T the printer accepts is not assignable to {@code fieldType}, a
* coercion from {@code fieldType} to T will be attempted before the Printer is invoked.
* 通过注解和字段类型获取输出接口
* @param annotation the annotation instance
* @param fieldType the type of field that was annotated
* @return the printer
*/
Printer<?> getPrinter(A annotation, Class<?> fieldType);
/**
* Get the Parser to parse a submitted value for a field of {@code fieldType}
* annotated with {@code annotation}.
* <p>If the object the parser returns is not assignable to {@code fieldType},
* a coercion to {@code fieldType} will be attempted before the field is set.
* 通过注解和字段类型获取解析接口
* @param annotation the annotation instance
* @param fieldType the type of field that was annotated
* @return the parser
*/
Parser<?> getParser(A annotation, Class<?> fieldType);
}
```

@ -0,0 +1,11 @@
# Spring Formatter
- 类全路径: `org.springframework.format.Formatter`
```java
public interface Formatter<T> extends Printer<T>, Parser<T> {
}
```
- 该接口继承了 printer 和 parser 两个接口.
- 比较常见的有: `DateFormatter` 就是继承这个接口.

@ -0,0 +1,27 @@
# Spring Parser
- 类全路径: `org.springframework.format.Parser`
- 类作用: 字符串准换成java对象
```java
@FunctionalInterface
public interface Parser<T> {
/**
* Parse a text String to produce a T.
* 将字符串转换成对象
* @param text the text string
* @param locale the current user locale
* @return an instance of T
* @throws ParseException when a parse exception occurs in a java.text parsing library
* @throws IllegalArgumentException when a parse exception occurs
*/
T parse(String text, Locale locale) throws ParseException;
}
```
- 类图
![Parser](/images/spring/Parser.png)

@ -0,0 +1,20 @@
# Spring Printer
- 类全路径: `org.springframework.format.Printer`
- 类作用: 对象转换成字符串
```java
@FunctionalInterface
public interface Printer<T> {
/**
* Print the object of type T for display.
* 打印对象
* @param object the instance to print
* @param locale the current user locale
* @return the printed text string
*/
String print(T object, Locale locale);
}
```
Loading…
Cancel
Save