ActionやJSONの微調整

ActionAdjustmentProvider

Actionクラスにまつわる色々な挙動を "統一的に" 調整できます。

強制404ルーティング対象の指定
isForced404NotFoundRouting()
強制ルーティング除外の指定
isForcedRoutingExcept()
強制ルーティング対象の指定
isForcedRoutingTarget()
Actionマッピングの調整
customizeActionMappingRequestPath()
後ろの/不足リダイレクト抑制
isSuppressTrailingSlashRedirect()
ルーティング対象なしを404にする?
isNoRoutingRequestAs404NotFound()
HTMLパスのフィルタ
filterHtmlPath()
HTMLパス探しのリトライ
prepareHtmlRetryWordList()
配列パラメータの上限
provideIndexedPropertySizeLimit()
Formのマッピングを調整
adjustFormMapping()
ValidatorのConfigを調整
adjustValidatorConfig()
ActionResponseの直前調整
adjustActionResponseJustBefore()
レスポンスの反映処理を調整
adjustResponseReflecting()
業務例外のハンドリングを調整
adjustApplicationExceptionHandling()
ActionのInOutのログを出力する?
isUseInOutLogging()
InOutのログを調整する?
adjustInOutLogging()

Exampleテンプレートとして、MaihamaActionAdjustmentProvider が用意されていますので、そのProviderクラスを直せば有効になります。 (AssistantDirector で登録されています)

強制404ルーティング対象の指定

TODO jflute もうこのURL来たらダメとか、SwaggerUIとかを指定する想定

強制ルーティング除外の指定

TODO jflute JS/APIひとまとめパターンで/api以外は受け付けないというようなとき

強制ルーティング対象の指定

TODO jflute .pdf とか拡張子で終わってるURLもActionで受けたいとき、わりと使う

Actionマッピングの調整

例えば、/jflute/product/list/ というようなURLで、一つ目の要素はユーザ名なのでマッピング判定には含めず、/product/list/ だけで Action を探しに行きたいとき、などに有効です。

e.g. /jflute/product/list/ なら /product/list/ で戻す @Java
public class MaihamaActionAdjustmentProvider implements ActionAdjustmentProvider {
    ...
    @Override
    public String customizeActionMappingRequestPath(String requestPath) {
        return ... // 先頭の要素を抜いたものを戻す 
    }
    ...
}

JSON API で URL にバージョンを入れるような場合(e.g. /api/v1/...)、このメソッドでバージョンを抜き出して filter し、抜き出したバージョンはリクエスト属性に入れるなりして Action に引き継いで利用するとよいでしょう。

後ろの'/'不足リダイレクト抑制

TODO jflute 後ろに'/'がなくてもリダイレクトをしないようにしたければ

ルーティング対象なしを404にする?

TODO jflute Java以外にリソースがなく、404の制御もこちらでやりたい場合など

HTMLパスのフィルタ

TODO jflute HTMLファイルのパスをフィルター、UserAgent見て携帯向けにhookするとか

HTMLパス探しのリトライ

TODO jflute HTMLファイルがなかったときのリトライ調整、これも携帯向けとかで

配列パラメータの上限

TODO jflute リクエストパラメーターの sea[0] の 0 の上限、デフォルトは200くらい

Formのマッピングを調整

TODO jflute Eclipse Collections とか、定義されてないパラメーターあったらエラーとか

ActionResponseの直前調整

TODO jflute 一律、レスポンスHTTPヘッダーに何かを入れるなら

レスポンスの反映処理を調整

ResponseReflectingOptionで、レスポンスの反映処理などを調整できます。

  • レスポンスのHtmlBeanのバリデーションエラーを例外出さずに警告ログに
  • レスポンスのHtmlBeanのバリデーションエラーを完全に抑制
  • レスポンスのJsonResultのバリデーションエラーを例外出さずに警告ログに
  • レスポンスのJsonResultのバリデーションエラーを完全に抑制

ValidatorのConfigを調整

TODO jflute Eclipse Collections とか、対応されていない型をバリデーション対象にするとか

業務例外のハンドリングを調整

ApplicationExceptionOptionで、業務例外の扱いを調整できます。

  • 強制的に通知ログを抑制したい業務例外を指定できる
業務例外ハンドリング (アプリ例外)

ActionのInOutのログを出力する?

トラブル対応のときのために、本番環境でもActionのリクエストとレスポンスの内容を残しておきたい場合は、 LastaFluteにてそれら情報を専用のログファイルに出力することができます(@since LastaFlute-1.0.0)(もちろん、若干のパフォーマンス劣化が発生する可能性があるので、不要であればやらないほうが良いです)

JsonResourceProvider

JSONにまつわる色々な挙動を "統一的に" 調整できます。

Exampleテンプレートとして、MaihamaJsonResourceProvider が用意されていますので、そのProviderクラスを直せば有効になります。 (AssistantDirector で登録されています)

nullの項目を出力しない?
isNullsSuppressed()
改行入りのJSONを出力する?
isPrettyPrintSuppressed()
JSONマッピングを調整
provideMappingOption()

JSONでnullの項目を出力しない?

省略したいときはtrue。

改行入りのJSONを出力する?

デフォルトでは、ローカル開発環境では改行入り、本番では改行なしになっています。

もし、本番でも改行入りにしたいときはtrue。

JSONマッピングを調整

TODO jflute スネークケースとか、Eclipse Collections とか