spring web service返回附加到url

时间:2014-01-08 05:31:17

标签: java spring rest spring-mvc

我有一个简单的网络服务,如下所示:

@RequestMapping(value="/api")
@Controller
public class TestController {
    @RequestMapping(method = RequestMethod.GET)
    public String hello() {
        System.out.println("this test is done ");
        return "this is test url";
    }
}

我的web.xml文件就像这样

<servlet-name>pa</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>pa</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <welcome-file-list>
    <welcome-file>/index.html</welcome-file>
  </welcome-file-list>

现在我已经点击了这个网址:http://localhost:8556/pa/api 它显示了一些像这样的东西

HTTP Status 404 - /pa/this is test url

type Status report

message /pa/this is test url

description The requested resource (/pa/this is test url) is not available.
Apache Tomcat/7.0.27

即。返回字符串被附加到url。

这是我的spring_context.xml

<bean id="log4jInitialization" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetClass" value="org.springframework.util.Log4jConfigurer" />
    <property name="targetMethod" value="initLogging" />
    <property name="arguments">
        <list>
            <value>classpath:logger/log4j.properties</value>
            <!-- log4j.refresh.interval -->
            <value>5000</value>
        </list>
    </property>
</bean>

不仅仅是答案,请你解释一下容器里面的东西是什么,为什么它很开心。 告诉我是否需要任何东西。 感谢名单。

2 个答案:

答案 0 :(得分:0)

Spring MVC documentationSupported method return types部分

中解释了这一点
  

以下是支持的返回类型:

     

[...]

     
      
  • 一个String值,被解释为逻辑视图名称,带有   模型通过命令对象隐式确定   @ModelAttribute带注释的引用数据访问器方法。
  •   

您的方法返回String,因此其值被解释为视图名称。您可能已在上下文中声明了InternalResourceViewResolver,其中包含视图名称并尝试解析InternalResourceView。这是通过将HttpServletRequest#getRequestDispatcher()与视图名称一起使用(前缀和后缀为已配置)来完成的。

阅读文档on resolving views.

答案 1 :(得分:0)

我知道它为什么开心... 它是这样的:

事情是,

All controllers in the Spring Web MVC framework return a ModelAndView instance. 
Views in Spring are addressed by a view name and are resolved by a view resolver.

所以返回什么,充当视图,因此附加到URL 解决此问题我使用@ResponceBody,如下

@RequestMapping(value="/api")
@Controller
public class TestController {
    @RequestMapping(method = RequestMethod.GET)
    public @ResponceBody String hello() {
        System.out.println("this test is done ");
        return "this is test url";
    }
}

现在@ResponceBody做什么
它表明HTTP消息转换器机制应该接管并将返回的对象转换为客户端需要的任何形式。这将告诉spring查看HTTP Accept标头并选择适当的转换器。如果我们提供带有application / json值的Accept标头,那么将调用JSON MappingJacksonHttpMessageConverter转换器。

告诉我是否需要进一步的信息。