SpringBootにおけるカスタムパラメータバインディング手順の詳細


通常の場合、フロントエンドから渡されたパラメータはそのままSpringMVCで受信できますが、Dateオブジェクトのような特殊な場合もあります。私のフロントエンドからの日付が来たら、サービス先のカスタムパラメータをバインドして、フロントエンドの日付を変換します。カスタムパラメータバインディングも簡単で、二つのステップに分けられます。
1.カスタムパラメータ変換器
カスタムパラメータ変換器は、以下の通りCoverterインターフェースを実現します。

public class DateConverter implements Converter<String,Date> {
 private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
 @Override
 public Date convert(String s) {
  if ("".equals(s) || s == null) {
   return null;
  }
  try {
   return simpleDateFormat.parse(s);
  } catch (ParseException e) {
   e.printStackTrace();
  }
  return null;
 }
}
convert方法は文字列パラメータを受信して、このパラメータは先端から伝わった日付文字列です。この文字列はyyy-M-ddフォーマットを満たしています。そしてSimpleDateFormatを通じてこの文字列をDateオブジェクトに変換して返してもいいです。
2.コンフィギュレーション変換器
カスタムWebMvcConfigはWebMvcConfigrer Adapterを継承して、addFormaters方法で構成します。

@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
 @Override
 public void addFormatters(FormatterRegistry registry) {
  registry.addConverter(new DateConverter());
 }
}
OKです。上記の2つのステップの後、フロントエンドから文字列の日付を受信し、Java中のDateオブジェクトに変更できます。フロントエンドの日付コントロールは以下の通りです。

<el-date-picker
 v-model="emp.birthday"
 size="mini"
 value-format="yyyy-MM-dd HH:mm:ss"
 style="width: 150px"
 type="date"
 placeholder="    ">
</el-date-picker>
サービスインターフェースは以下の通りです。

@RequestMapping(value = "/emp", method = RequestMethod.POST)
public RespBean addEmp(Employee employee) {
 if (empService.addEmp(employee) == 1) {
  return new RespBean("success", "    !");
 }
 return new RespBean("error", "    !");
}
このうちEmployeeには、bithdayという属性があります。この属性のデータタイプはDateです。