【发布时间】:2013-09-20 18:22:06
【问题描述】:
在我的项目(Java/Play 框架)中,我有一个错误处理路由,它检查来自 Web 服务的响应,如果响应是错误代码,我们会显示相应的错误消息,说明用户输入的问题,该服务检查用户输入的有效性。
当用户输入一个%符号时,这个逻辑就中断了,因为错误显示逻辑使用了
String.format(message, messageArgs);
将 messageArgs 插入到找到 % 的消息字符串中,如果 messageArgs 也包含 %,我会得到一个异常。
在显示消息之前,我需要清理、转义或以其他方式从用户输入中删除 %。
消息:请求的电子邮件地址 %s 无效 messageArgs:orlybg%@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!)
谢谢!
【问题讨论】:
-
你能显示错误信息吗?我认为
%在messageArgs中的存在不会有任何问题。 -
你能发布一个输入失败的例子吗?
-
准备好刚刚编辑的帖子
-
使用String#format会出问题
-
我不明白你的意思@archer
标签: java string string.format input-sanitization