我已经创建了一个自定义存储库,我想让它在Spring-restbucks示例之后注册Spring Data Rest存储库。
@RestController
public class BuildingController implements ResourceProcessor<RepositoryLinksResource> {
public static final String PAGES_REL = "pages";
@Autowired(required=true)
public BuildingController(BuildingRepository repository) {
Assert.notNull(repository);
this.repository = repository;
}
private final BuildingRepository repository;
当我在应用程序的其余部分部署它时,我在ResourceProcessorHandlerMethodReturnValueHandler ctor中获得NPE。 在调试过程中,我注意到我拥有的所有其他处理器都是regualr java对象,只有BuildingController一个是com.sun.proxy。$ Proxy ... 因此问题在于在JDK代理对象上转换为Class。
以下是NPE发生的代码的ResourceProcessorHandlerMethodReturnValueHandler中的行:
TypeInformation<?> componentType = from(processor.getClass()).getSuperTypeInformation(ResourceProcessor.class)
.getComponentType();
Class<?> rawType = componentType.getType();
我的问题是如何避免NPE?
还有一点要注意的是,我正在尝试使用xml和Java配置Spring,因为我在WebLogic服务器上运行Application,它只支持servlet 2.5。 以下是我的配置的摘录。我想我在这里做错了什么:
我的web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/root-context.xml
/WEB-INF/spring/spring-security.xml
/WEB-INF/spring/appServlet/servlet-context.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
servlet的context.xml中
<context:component-scan base-package="com.my.app, org.springframework.security"/>
然后我创建了java配置
@Configuration
@ComponentScan( "com.my.app.platform" )
@EnableWebMvc
@EnableHypermediaSupport( type = EnableHypermediaSupport.HypermediaType.HAL )
public class WebMvcConfiguration extends RepositoryRestMvcConfiguration
{
答案 0 :(得分:0)
我找到了根本原因。
在servlet-contect.xml中我也配置了aop
<aop:aspectj-autoproxy >
<aop:include name="loggingAspect"/>
</aop:aspectj-autoproxy>
所以当我删除它时,一切都很好。 我还尝试添加proxy-target-class =&#34; true&#34;强迫CGLIB但是我在同一个地方有堆栈溢出异常???
不确定如何将AOP与SDR处理器相结合? 有什么想法吗?