Spring Bootの注記ベースのデータフォーマット
Spring BootはWebアプリケーションを開発するために使用され、大部分はSpring MVCのいくつかの機能と特性を使用している.Spring MVCは、データをフォーマットする際に、開発者がデータを処理するのに便利な内部フォーマットツールを多く提供しています.詳細については、以下を参照してください.http://blog.csdn.net/jrainbow/article/details/46709543.
Spring MVCもいくつかのインタフェースを提供して、私たちに便利な拡張を提供して、いくつかの方法をカスタマイズしてデータを処理します.
ここではSpring MVCのAnnotationFormatterFactoryインタフェースを使用して、文字列とjava.sql.Timestamp間のフォーマットを実現します.Spring Bootの自動構成機能を使用して、このフォーマットツールをSpring Bootプロジェクトに導入します.
1、カスタム注記
まず@TimestampFormat注釈を定義し、エンティティクラスの属性または属性のgetterメソッドでこの注釈を落札すると、Spring MVCは、この属性が受信したデータをフォーマットする必要があることを知っています.
たとえば、TaskエンティティークラスのstartTimeプロパティを次に示します.
2、AnnotationFormatterFactoryの実現
AnnotationFormatterFactoryインタフェースの定義は次のとおりです. getFieldType()は、属性の説明に使用されるフォーマットが必要なすべての注釈セットを返します. getPrinter()は、このフォーマットファクトリで使用されているフォーマットツールを返します. getParser()は、逆(逆)フォーマットのツールを返します.
JAva.sql.Timestampのフォーマット処理は以下の通りです.注記セット フォーマットツール
このツールにはPrinterとParserが含まれています.
完全なコード:
3、配置
Spring MVCの構成:
Spring Boot MVCのような便利な開発とインターネット、formatters、view controllersなどの追加のMVC構成を利用したい場合は、WebMvcConfigurerAdapterを継承してこれらの構成に参加することができます.@Configurationを使用してSpirng Bootに渡して自動的に構成します.
Spring Bootプロジェクトでフォーマット機能を使用する場合は、WebMvcConfigurerAdapterのaddFormattersメソッドを書き換えます.
Spring MVCもいくつかのインタフェースを提供して、私たちに便利な拡張を提供して、いくつかの方法をカスタマイズしてデータを処理します.
ここではSpring MVCのAnnotationFormatterFactoryインタフェースを使用して、文字列とjava.sql.Timestamp間のフォーマットを実現します.Spring Bootの自動構成機能を使用して、このフォーマットツールをSpring Bootプロジェクトに導入します.
1、カスタム注記
package xyz.ibenben.parttime.common.formatter.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
/**
* @TimestampFormat
*
* Timestamp
*
* @author
* @Email [email protected]
* @Date 2015-1-28 9:59:52
*
* @version 1.0.0
*
*/
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface TimestampFormat {
}
まず@TimestampFormat注釈を定義し、エンティティクラスの属性または属性のgetterメソッドでこの注釈を落札すると、Spring MVCは、この属性が受信したデータをフォーマットする必要があることを知っています.
たとえば、TaskエンティティークラスのstartTimeプロパティを次に示します.
package xyz.ibenben.parttime.task.entity;
import java.io.Serializable;
import java.sql.Timestamp;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Transient;
import xyz.ibenben.parttime.common.formatter.annotation.TimestampFormat;
import xyz.ibenben.parttime.user.entity.Employer;
public class Task implements Serializable {
private static final long serialVersionUID = 522265566715251213L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String profession;
@Column(name = "employer_id")
private Integer employerId;
@Column(name = "location_id")
private Integer locationId;
@Column(name = "init_time")
private Timestamp initTime;
@TimestampFormat
@Column(name = "start_time")
private Timestamp startTime;
@Column(name = "low_hourly_wage")
private Double lowHourlyWage;
@Column(name = "hight_hourly_wage")
private Double hightHourlyWage;
private String descript;
private Integer state;
@Transient
private TaskSituation situation;
@Transient
private Employer employer;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getProfession() {
return profession;
}
public void setProfession(String profession) {
this.profession = profession;
}
public Integer getEmployerId() {
return employerId;
}
public void setEmployerId(Integer employerId) {
this.employerId = employerId;
}
public Timestamp getInitTime() {
return initTime;
}
public void setInitTime(Timestamp initTime) {
this.initTime = initTime;
}
public Timestamp getStartTime() {
return startTime;
}
public void setStartTime(Timestamp startTime) {
this.startTime = startTime;
}
public Double getLowHourlyWage() {
return lowHourlyWage;
}
public void setLowHourlyWage(Double lowHourlyWage) {
this.lowHourlyWage = lowHourlyWage;
}
public Double getHightHourlyWage() {
return hightHourlyWage;
}
public void setHightHourlyWage(Double hightHourlyWage) {
this.hightHourlyWage = hightHourlyWage;
}
public String getDescript() {
return descript;
}
public void setDescript(String descript) {
this.descript = descript;
}
public Integer getState() {
return state;
}
public void setState(Integer state) {
this.state = state;
}
public Employer getEmployer() {
return employer;
}
public void setEmployer(Employer employer) {
this.employer = employer;
}
public Integer getLocationId() {
return locationId;
}
public void setLocationId(Integer locationId) {
this.locationId = locationId;
}
public TaskSituation getSituation() {
return situation;
}
public void setSituation(TaskSituation situation) {
this.situation = situation;
}
}
2、AnnotationFormatterFactoryの実現
package org.springframework.format;
public interface AnnotationFormatterFactory<A extends Annotation> {
Set<Class>> getFieldTypes();
Printer> getPrinter(A annotation, Class> fieldType);
Parser> getParser(A annotation, Class> fieldType);
}
AnnotationFormatterFactoryインタフェースの定義は次のとおりです.
JAva.sql.Timestampのフォーマット処理は以下の通りです.
Set> set = new HashSet>();
set.add(Timestamp.class);
this.fieldTypes = set;
public Set> getFieldTypes() {
return fieldTypes;
}
/**
* Timestamp
*
* TimestampFormatter
*
* @author
* @Email [email protected]
* @Date 2015-1-28 11:34:35
*
* @version 1.0.0
*
*/
private class TimestampFormatter implements Formatter<Timestamp>,Serializable{
private static final long serialVersionUID = -818656464607971661L;
public String print(Timestamp value, Locale locale) {
if(value == null) {
return "";
}
return value.toString();
}
public Timestamp parse(String value, Locale locale) throws ParseException {
if(value.length() == 16){
value = new StringBuffer(value).append(":00").toString();
}
return Timestamp.valueOf(value);
}
}
このツールにはPrinterとParserが含まれています.
public Parser getParser(TimestampFormat annotation, Class> fieldType) {
return formatter;
}
public Printer getPrinter(TimestampFormat annotation, Class> fieldType) {
return formatter;
}
完全なコード:
package xyz.ibenben.parttime.common.formatter;
import java.io.Serializable;
import java.sql.Timestamp;
import java.text.ParseException;
import java.util.HashSet;
import java.util.Locale;
import java.util.Set;
import org.springframework.format.AnnotationFormatterFactory;
import org.springframework.format.Formatter;
import org.springframework.format.Parser;
import org.springframework.format.Printer;
import xyz.ibenben.parttime.common.formatter.annotation.TimestampFormat;
/**
* Timestamp
*
* TimestampFormatAnnotationFormatterFactory
*
* @author
* @Email p_3er@qq.com
* @Date 2015-1-28 10:20:47
*
* @version 1.0.0
*
*/
public class TimestampFormatAnnotationFormatterFactory implements AnnotationFormatterFactory<TimestampFormat>{
private final Set> fieldTypes;
private final TimestampFormatter formatter;
public TimestampFormatAnnotationFormatterFactory() {
Set> set = new HashSet>();
set.add(Timestamp.class);
this.fieldTypes = set;
this.formatter = new TimestampFormatter();
}
public Set> getFieldTypes() {
return fieldTypes;
}
public Parser getParser(TimestampFormat annotation, Class> fieldType) {
return formatter;
}
public Printer getPrinter(TimestampFormat annotation, Class> fieldType) {
return formatter;
}
/**
* Timestamp
*
* TimestampFormatter
*
* @author
* @Email p_3er@qq.com
* @Date 2015-1-28 11:34:35
*
* @version 1.0.0
*
*/
private class TimestampFormatter implements Formatter<Timestamp>,Serializable{
private static final long serialVersionUID = -818656464607971661L;
public String print(Timestamp value, Locale locale) {
if(value == null) {
return "";
}
return value.toString();
}
public Timestamp parse(String value, Locale locale) throws ParseException {
if(value.length() == 16){
value = new StringBuffer(value).append(":00").toString();
}
return Timestamp.valueOf(value);
}
}
}
3、配置
Spring MVCの構成:
<bean class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="formatters">
<list>
<bean class="com.benben.timetable.common.formatter.TimestampFormatAnnotationFormatterFactory"/>
list>
property>
bean>
Spring Boot MVCのような便利な開発とインターネット、formatters、view controllersなどの追加のMVC構成を利用したい場合は、WebMvcConfigurerAdapterを継承してこれらの構成に参加することができます.@Configurationを使用してSpirng Bootに渡して自動的に構成します.
Spring Bootプロジェクトでフォーマット機能を使用する場合は、WebMvcConfigurerAdapterのaddFormattersメソッドを書き換えます.
package xyz.ibenben.parttime.common.configure;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import xyz.ibenben.parttime.common.formatter.TimestampFormatAnnotationFormatterFactory;
@Configuration
public class SpringConfig extends WebMvcConfigurerAdapter{
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addFormatterForFieldAnnotation(new TimestampFormatAnnotationFormatterFactory());
super.addFormatters(registry);
}
}