我试图学习如何使用Spring JDBC连接数据库。现在,我只想尝试一个简单的get请求来检索H2中表的内容。但是,每次运行测试时,都会出现404错误:
12:05:41.237 [main] DEBUG org.springframework.web.client.RestTemplate - Created GET request for "http://localhost:8080/rides"
12:05:41.339 [main] DEBUG org.springframework.web.client.RestTemplate - GET request for "http://localhost:8080/rides" resulted in 404 (null); invoking error handler
org.springframework.web.client.HttpClientErrorException: 404 null
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:94)
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:79)
at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63)
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:777)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:730)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:686)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:631)
at com.example.RideResourcesTest.testGetRides(RideResourcesTest.java:21)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:237)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Process finished with exit code -1
我的测试代码是: 公共类RideResourcesTest {
@Test
public void testGetRides() {
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<List<Ride>> rideResponse = restTemplate.exchange(
"http://localhost:8080/rides", HttpMethod.GET,
null, new ParameterizedTypeReference<List<Ride>>() {
}
);
List<Ride> rides = rideResponse.getBody();
for (Ride ride : rides) {
System.out.println("Ride Name: " + ride.getName());
}
}
我的存储库实现是:
@Repository("rideDAO")
public class RideDAOImpl implements RideDAO {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public List<Ride> getRides() {
List<Ride> rides = jdbcTemplate.query("select * from ride;", new RideRowMapper());
return rides;
}
}
我的服务实施:
@Service("rideManager")
public class RideManagerImpl implements RideManager {
@Autowired
private RideDAO dao;
@Override
public List<Ride> getRides() {
return dao.getRides();
}
}
最后,我的控制器如下:
@Controller
public class RideResource {
@Autowired
private RideManager manager;
@RequestMapping(value = "/rides", method = RequestMethod.GET)
public @ResponseBody List<Ride> getRides() {
return manager.getRides();
}
}
我的代码中没有看到任何不合适的地方,所以我想知道还有什么可能导致这种情况发生。部分我怀疑我可能在Tomcat设置上做错了什么,但这对我没有任何意义;如果是这种情况,它可能无法启动,而且每次使用它时似乎都能正确部署战争。
编辑:这是我的Spring配置文件,用于注册我的应用程序的组件,以及连接到数据库:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:c="http://www.springframework.org/schema/c"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tool"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-4.3.xsd">
<context:annotation-config/>
<context:component-scan base-package="com.example"/>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.h2.Driver"/>
<property name="url" value="jdbc:h2:tcp://localhost/~/test"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
Web.xml中
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>jdbcSpring</display-name>
<servlet>
<servlet-name>jdbcSpringServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
src/main/webapp/WEB-INF/config/servlet-config.xml
classpath:jdbc-config.xml
</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>jdbcSpringServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
编辑:此外,此代码是教程的一部分,用于演示如何使用Spring JDBC。我试图让代码在我自己的Intellij实例上运行。该课程的制作者在GitHub上发布了他的代码,here。
答案 0 :(得分:0)
我在错误中看到的是,
org.springframework.web.client.HttpClientErrorException: 404 null
您正试图在代码中连接到您的客户端而客户端未启动。
如果您通过其他模板查询网址,该客户端应首先显示。