惯例:
我是温浩然:
springMVC中遇到的错误,
除了查询,只要是对数据库进行修改的操作,总是成功操作数据到数据库,然后,控制台报错。
就是用这一套东西,来进行一系列操作,
整个系统架构是,+JDBC+tiles.
先贴一段代码,追踪错误的时候,追踪到这里
getMasterTemplate().update(new PreparedStatementCreator() {
@Override
public java.sql.PreparedStatement createPreparedStatement(
java.sql.Connection con) throws SQLException {
PreparedStatement ps = con.prepareStatement(sql);
int i = 0;
ps.setString(++i, circle.getName());
ps.setLong(++i, circle.getCreateTime());
return ps;
}
});
这里的,
<span style="font-family: Arial, Helvetica, sans-serif;">getMasterTemplate</span>
是另一段代码,我也贴出来
@Resource(name = "forumTemplate")
private JdbcTemplate masterTemplate;
protected JdbcTemplate getMasterTemplate() {
return masterTemplate;
}
要是你问我@resource是什么东西,我只能告诉你,自己去百度spring注解。
然后,我把controller贴出来
@RequestMapping(value = "/del")
public RetrunValue delCircle(@RequestBody Map<String,Object> map) {
long circleId = Long.parseLong( map.get("id").toString());
try {
circleService.delete(circleId);
} catch (Exception e) {
resultCode=ResultCode.NOT_EXIST;
}
return new RetrunValue(resultCode.getCode());
}
然后就报错了,报错信息如下:
严重: Servlet.service() for servlet [forum] in context with path [/forum] threw exception [Could not resolve view with name 'pcir/del' in servlet with name 'forum'] with root cause
javax.servlet.ServletException: Could not resolve view with name 'pcir/del' in servlet with name 'forum'
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1190)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:992)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:855)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
错误日志好多,是不?
而且还没提示是咱们写的代码哪个地方有错。
然后,用debug又追踪不到真正的错误
然后,直觉告诉我,肯定是controller中,什么地方少引用了什么东西。
因为,无论我进行什么操作,总是成功操作到数据库的,然后控制台打印错误。
然后,找到了这个
http://liyanjie918.blog.163.com/blog/static/20227290201311253503695/
说的比较含糊,我这里属于第二种原因,方法中,加入了一个注解。@ResponseBody
然后就可以了,成功的代码如下:
@RequestMapping(value = "/del")
public <span style="color: rgb(216, 130, 109); font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px; line-height: 28px;">@ResponseBody</span> RetrunValue delCircle(@RequestBody Map<String,Object> map) {
long circleId = Long.parseLong( map.get("id").toString());
try {
circleService.delete(circleId);
} catch (Exception e) {
resultCode=ResultCode.NOT_EXIST;
}
return new RetrunValue(resultCode.getCode());
}