Java 国际奥委会的春假服务?

Java 国际奥委会的春假服务?,java,spring,rest,spring-mvc,Java,Spring,Rest,Spring Mvc,过去,我使用Spring和IOC(application-context.xml,其中我声明我的控制器有两个不同的DAO等,Spring为我设置了它们)做了一些简单的SOAP服务 现在我正在尝试使用Spring做一个REST服务 我的控制器看起来像这样 @RestController @RequestMapping("/") public class MyController { private MyDAO1 myDAO1; private MyDAO2 myDAO2; @RequestMa

过去,我使用Spring和IOC(application-context.xml,其中我声明我的控制器有两个不同的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;
}
My 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 />
当我删除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中声明
  • 由于
    rest servlet.xml
你应该:


  • 删除两次加载控制器的声明,Spring会尝试两次映射它:

    • 它在rest servlet.xml中声明
    • 由于
      rest servlet.xml
    你应该:


    • 删除声明
      为什么要费劲去做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;
      }
      

      如果你想学春天。。。你得把毒药捡起来。转到XML或注释。将两者结合起来是一个漫长而艰苦的学习过程。

      为什么要费劲去做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;
      }
      

      如果你想学春天。。。你得把毒药捡起来。转到XML或注释。将这两者混合起来是一个非常漫长而艰苦的学习过程。

      请求应该是
      /MyTestService/name
      ,这是请求映射中映射的内容。请求应该是
      /MyTestService/name
      ,这是请求映射中映射的内容。Serge Ballesta的回答为我提供了窍门。但我意识到我现在正在使用XML和注释。做事情的“更好”方式是什么?XML还是注释?@Diskutant:这是一个意见问题。控制器中需要注释(
      RequestMapping
      …)。对于剩下的部分,两者都同样可用,并且完全受spring支持。我在控制器中用@Autowired注释了DAO,它可以工作,但是我的DAO扩展了NamedParameterJdbcDaoSupport,并且数据源也需要连接。错误是:
      “找不到[com.test.dao.MyDAO]类型的符合依赖项条件的bean:至少需要1个符合此依赖项autowire候选项条件的bean。”
      如果我在rest-servlet.xml中有它,它可以正常工作,但在仅使用注释时,除了
      之外,应该没有其他内容,是吗?@Bean在您的DAO classIMHO之上,我将把您的数据源Bean留在您的servlet/应用程序上下文中的XML中。90%的关于春天的教程都是这样写的。Serge Ballesta的回答对我来说很有帮助。但我意识到我现在正在使用XML和注释。做事情的“更好”方式是什么?XML还是注释?@Diskutant:这是一个意见问题。控制器中需要注释(
      RequestMapping
      …)。对于剩下的部分,两者都同样可用,并且完全受spring支持。我在控制器中用@Autowired注释了DAO,它可以工作,但是我的DAO扩展了NamedParameterJdbcDaoSupport,并且数据源也需要连接。错误是:
      “找不到[com.test.dao.MyDAO]类型的符合依赖项条件的bean:至少需要1个符合此依赖项autowire候选项条件的bean。”
      如果我在rest-servlet.xml中有它,它可以正常工作,但在仅使用注释时,除了
      之外,应该没有其他内容,是吗?@Bean在您的DAO classIMHO之上,我将把您的数据源Bean留在您的servlet/应用程序上下文中的XML中。90%的关于spring的教程都是这样写的。
      <bean id="myController" class="com.test.controller.MyController">
      <property name="myDAO1" ref="myDAO1" />
      <property name="myDAO2" ref="myDAO2" />
      </bean>