我有一个用于验证用户输入的界面。为了进行验证,我使用了一些标准 Java 验证器和一些自定义验证器。我的自定义验证器在出错时抛出 ParseException 并带有本地化消息。但我不知道Java或第三方lib是否也使用本地化消息。
问题:如何在 catch 块中获取异常是否有本地化消息的提示(标准 Java 方式,而不是自定义异常类/接口)?
您可以简单地使用
getLocalizedMessage()
显示消息,默认实现仅调用 getMessage()
。
来自 Throwable 类的 文档:
公共字符串 getLocalizedMessage()
创建此 throwable 的本地化描述。子类可以重写此方法以生成特定于区域设置的消息。对于不重写此方法的子类,默认实现返回与 getMessage() 相同的结果。
这是一个简单的演示。
import java.util.Locale;
import java.util.Optional;
import java.util.ResourceBundle;
import javax.inject.Inject;
import javax.inject.Provider;
import javax.servlet.http.HttpServletRequest;
public abstract class AbstractException extends RuntimeException {
// if you are using cdi
@Inject
private Provider<HttpServletRequest> request;
@Override
public String getLocalizedMessage() {
Locale locale = Optional.ofNullable(request).map(Provider::get).map(HttpServletRequest::getLocale)
.orElseGet(Locale::getDefault);
String message = ResourceBundle.getBundle("messages", locale).getString(getClass().getName());
return message;
}
}
public class ExceptionImpl extends AbstractException {
public static void main(String[] args) {
throw new ExceptionImpl();
}
}
messages_en_US.properties 的内容:
ExceptionImpl=this is message!