9

私のプロジェクト (Java/Play フレームワーク) では、応答がエラー コードである場合に Web サービスからの応答をチェックするエラー処理ルーティングがあり、ユーザー入力の問題を示す対応するエラー メッセージが表示され、サービスがチェックします。ユーザー入力の有効性。

ユーザーが % 記号を入力すると、エラー表示ロジックが使用するため、このロジックが壊れます。

String.format(message, messageArgs);

これは、% を見つけるメッセージ文字列のイントロに messageArgs を補間します。また、messageArgs に % が含まれている場合は、例外が発生します。

メッセージを表示する前に、ユーザー入力から % をサニタイズ、エスケープ、または削除する必要があります。

message: 要求された電子メール アドレス %s は無効です messageArgs: orlyb%@gmail.com

Javaでこれを最も簡単で最短の方法で行う方法に関するアドバイスはありますか?

エラーログの一部です

 java.util.UnknownFormatConversionException: Conversion = 'i'
   at java.util.Formatter$FormatSpecifier.conversion(Formatter.java:2646)
   at java.util.Formatter$FormatSpecifier.<init>(Formatter.java:2675)
   at java.util.Formatter.parse(Formatter.java:2528)
   at java.util.Formatter.format(Formatter.java:2469)
   at java.util.Formatter.format(Formatter.java:2423)
   at java.lang.String.format(String.java:2797)
   at controllers.api.PublicAPI.renderAPIError(PublicAPI.java:176)
   at controllers.api.DeviceAPI.setEmailAddress(DeviceAPI.java:736)
   at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:557)
   at play.mvc.ActionInvoker.invoke(ActionInvoker.java:508)
   at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:484)
   at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:479)
   at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161)
   at Invocation.HTTP Request(Play!)

ありがとう!

4

3 に答える 3

1

整数をフォーマットしようとして使用する可能性が最も高い場合、これは正しくありませjava.util.UnknownFormatConversionException: Conversion = 'i'ん。10 進数の整数をフォーマットするには、 を使用する必要があります。完全にサポートされている変換仕様は、ここにあります。%imessage%d

于 2013-09-20T18:34:17.100 に答える