java - 带 IOC 的 Spring REST 服务?

标签 java spring rest spring-mvc

过去,我使用 Spring 和 IOC 做了一些简单的 SOAP 服务(application-context.xml,其中我声明我的 Controller 有 2 个不同的 DAO 等,Spring 为我设置了它们)

现在我正在尝试使用 Spring 执行 REST 服务。

我的 Controller 看起来像这样

@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映射

我错过了什么?

最佳答案

您加载 Controller 两次,Spring 尝试映射它两次:

  • 它在 rest-servlet.xml 中声明
  • 由于@RestController,它被发现是一个带注释的 Controller 注释和标签<context:component-scan base-package="de.cat.auftrag.controller" />rest-servlet.xml

您应该:

  • 删除声明<bean id="myController" ...来自rest-servlet.xml ,但您必须自动连接 DAO
  • 删除 <context:component-scan ...标记,如果您没有任何其他要扫描的 bean。

关于java - 带 IOC 的 Spring REST 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27021380/

相关文章:

java - spring框架中@Qualifier和javax.inject的区别?

java - JPA 实体中的方法是否允许抛出异常?

java - 如何配置和检索 g :select in Grails? 的值

java - 这是 Files.lines() 中的错误,还是我对并行流有误解?

javascript - AngularJS $http.put PUT 方法不发送数据

mongodb - junit中的模拟休息服务(带 Spring )

java - 处理 "killed"Java作业的方法?

java - 如何高效地将各种输入参数传递给类中的方法?

java - 如何返回用户拥有的角色列表?

java - Spring 版本 4.3.20 是否适用于 Java 11?