[英]Spring REST Service with IOC?
過去,我使用Spring和IOC(application-context.xml,其中我的控制器具有2個不同的DAO等,並且Spring為我設置了它們)做了一些簡單的SOAP服務。
現在,我嘗試使用Spring進行REST服務。
我的控制器看起來像這樣
@RestController
@RequestMapping("/")
public class MyController {
private MyDAO1 myDAO1;
private MyDAO2 myDAO2;
@RequestMapping("/name")
public MyTest getGreeting() {
MyTest tst = new MyTest(1, "Hallo ");
return tst;
}
public void setMyDAO1(MyDAO1 myDAO1) {
this.myDAO1 = myDAO1;
}
public void setMyDAO2(MyDAO2 myDAO2) {
this.myDAO2 = myDAO2;
}
我的rest-servlet.xml包含以下內容:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<!-- Configure to plugin JSON as request and response in method handler -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jsonMessageConverter" />
</list>
</property>
</bean>
<!-- Configure bean to convert JSON to POJO and vice versa -->
<bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
</bean>
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/InformixDB" />
<property name="resourceRef" value="true" />
</bean>
<bean id="myDAO1" class="com.test.dao.MyDAO1">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="myDAO2" class="com.test.dao.MyDAO2">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="myController" class="com.test.controller.MyController">
<property name="myDAO1" ref="myDAO1" />
<property name="myDAO2" ref="myDAO2" />
</bean>
<context:component-scan base-package="com.test.controller.myController" />
<mvc:annotation-driven />
現在我得到了錯誤
java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'myController' bean method
public com.test.entity.MyTest com.test.controller.MyController.getGreeting()
to {[//name],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}: There is already 'myController' bean method
public com.test.entity.MyTest com.test.controller.MyController.getGreeting() mapped.
當我刪除RequestMapping批注時,可以將其部署在tomcat上,但是我不知道如何調用該服務
org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/MyTestService/getGreeting] in DispatcherServlet with name 'rest'
“ rest”是web.xml中的servlet映射
我想念什么?
您將控制器加載兩次,而Spring嘗試將其映射兩次:
rest-servlet.xml
聲明 @RestController
注釋和rest-servlet.xml
的標簽<context:component-scan base-package="de.cat.auftrag.controller" />
,它被發現為帶注釋的控制器。 您應該:
rest-servlet.xml
刪除聲明<bean id="myController" ...
,但是您必須自動連接DAO。 <context:component-scan ...
標記。 為什么要麻煩做Spring已經為您做的事情?
@Controller // << See Here
@RequestMapping("/")
public class MyController {
@Autowired // << See Here
private MyDAO1 myDAO1;
@Autowired // << See Here
private MyDAO2 myDAO2;
@RequestMapping("/name")
public MyTest getGreeting() {
MyTest tst = new MyTest(1, "Hallo ");
return tst;
}
您的網址很可能是基本軟件包中的最后一個軟件包。 在這種情況下, http://url:8080/rest/controller
並刪除。
<bean id="myController" class="com.test.controller.MyController">
<property name="myDAO1" ref="myDAO1" />
<property name="myDAO2" ref="myDAO2" />
</bean>
如果您想學習Spring ...,您將不得不選擇毒葯。 使用XML或注釋。 混合兩者是非常漫長而艱苦的學習過程的秘訣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.