在 项目中使用#springMessage进行错误码解析为错误消息,可是在特定的场景下出现了
$springMacroRequestContext.getMessage($code)
#springMessage 是在org/springframework/web/servlet/view/velocity/spring.vm 文件中定义了一个宏。其内容是:
#** * springMessage * * Macro to translate a message code into a message. *# #macro( springMessage $code )$springMacroRequestContext.getMessage($code)#end
springMacroRequestContext 又是什么呢?
分析Spring 的代码可以发现:
这个是值在AbastractTemplateView中北定义了
public abstract class AbstractTemplateView extends AbstractUrlBasedView { /** * Variable name of the RequestContext instance in the template model, * available to Spring's macros: e.g. for creating BindStatus objects. */ public static final String SPRING_MACRO_REQUEST_CONTEXT_ATTRIBUTE = "springMacroRequestContext";
if (this.exposeSpringMacroHelpers) { if (model.containsKey(SPRING_MACRO_REQUEST_CONTEXT_ATTRIBUTE)) { throw new ServletException( "Cannot expose bind macro helper '" + SPRING_MACRO_REQUEST_CONTEXT_ATTRIBUTE + "' because of an existing model object of the same name"); } // Expose RequestContext instance for Spring macros. model.put(SPRING_MACRO_REQUEST_CONTEXT_ATTRIBUTE, new RequestContext(request, response, getServletContext(), model)); }至此我们可以发现 这个对象就是org.springframework.web.servlet.support.RequestContext 对象。
最终被调用的方法是:
/** * Retrieve the message for the given code, using the "defaultHtmlEscape" setting. * @param code code of the message * @return the message * @throws org.springframework.context.NoSuchMessageException if not found */ public String getMessage(String code) throws NoSuchMessageException { return getMessage(code, null, isDefaultHtmlEscape()); }
可是最终发现页面上显示的是:
$springMacroRequestContext.getMessage($code)
通过这个输出可以发现其原因是该宏未定义。 为什么会是未定义,仔细考虑一下发现原来是在异常的时候传入的code 不是一个String 类型,而是一个枚举类。
相关推荐
Spring Boot 是一个用于简化 Spring 应用程序开发的框架,它基于 Spring 框架,通过提供默认配置和约定大于配置的方式,使得开发者能够快速搭建基于 Spring 的应用。以下是关于 Spring Boot 的介绍说明和使用技巧的...
响应式宣言We want systems that are Responsive, Resilient, Elastic and Message Driven.
Spring#struct2#hibernat#java#jee JEE开发应用的文档,可供参考学习的!
前言一、两个核心类XmlBeanFactory 继承向 DefaultListableBeanFactory ,而 DefaultListableBeanFac
默认情况下,使用DefaultMessageCodesResolver,它(例如)不仅使用您提供的代码注册消息,还会注册包含您传递给reject方法的字段名称的
谈谈自己对于Spring IoC和AOP的理解SpringAOP和AspectAOP有什么区别Spring中的bean的作用域有哪些Spring中的单例bean
二、Spring Cloud Alibaba 三、Spring Cloud Alibaba 包含的组件 四、Spring Cloud Alibaba 功能
Spring AOP 代理一、两种代理方式1. JDK动态代理:其代理对象必须是某个接口的实现,它是通过在运行期间创建一个接口的实现类来完成对目标对象的代理。二
72、Spring Boot Gradle 插件Spring Boot Gradle Plugin 在 Gradle 中提供了 Spring Boot 支持,允
spring boot启动失败,没有任何错误日志输出,只输出了如下信息:可能的原因:1、日志配置文件没有配好如果自己没有写日志配置,可能是被其他jar包中的lo
如果要使用 DefaultJmsListenerContainerFactoryConfigurer 重用 Spring Boot 的默认值,可以禁用事务会话,
1. 什么是SpringCloud 2. SpringCloud的核心组件有哪些 3. SpringCloud和Dubbo 4. Dubbo的RPC和Sprin
spring 集成框架基础问题springboot + shiro @Transaction不生效SpringTransactionAnnotationPars
1.继承ApplicationContextAware 2.代码如下 3.记得要把这个工具类加入到Spring的扫描路径下,这样才能在初始化时注入 4.使用方法
3. java目录下创建路径(com.springcloud.demo)及启动类 ProvideServerApplication.java 4. 创建配置文件
Spring源代码分析(三):Spring JDBC Spring源代码解析(四):Spring MVC Spring源代码解析(五):Spring AOP获取Proxy Spring源代码解析(六):Spring声明式事务处理 Spring源代码解析(七):Spring AOP中对拦截器...
参考文档基于Dockerfile搭建JAVA Tomcat运行环境:
2. 用来加载的Spring的上下文环境 3. 正常的测试类的形式和实现 4. Junit中出现的问题汇总 5. 使用Mock完成单元测试 6. 相关代码参考
扩展问题如果项目少配置少的情况可以通过/refresh来手动刷新配置,如果项目比较复杂的情况呢这种肯定是行不通的,Spring Cloud Bus消息总线可以解
Spring Boot 中集成 MyBatis多类型支持在 Mybatis 3.5 支持 Optional 之后,我们还可以将判断优雅化为如下形式:public