gpt4 book ai didi

spring - 在简单的 Spring 4 REST 服务上获取 404

转载 作者:行者123 更新时间:2023-12-01 16:35:01 24 4
gpt4 key购买 nike

我正在尝试访问我编写的 RESTful Web 服务:

http://localhost:8080/dukegen/ws/family/1

但在浏览器中使用地址栏时出现 404 错误,不知道为什么。我正在尝试返回 JSON。我已将 Jackson 2 放在我的类路径中:

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.3.1</version>
</dependency>

这是服务器输出:

Jan 14, 2014 8:29:55 PM org.springframework.web.servlet.handler.AbstractUrlHandlerMapping registerHandler
INFO: Mapped URL path [/ws/family/{familyId}] onto handler 'familyResource'
Jan 14, 2014 8:29:55 PM org.springframework.web.servlet.handler.AbstractUrlHandlerMapping registerHandler
INFO: Mapped URL path [/ws/family/{familyId}.*] onto handler 'familyResource'
Jan 14, 2014 8:29:55 PM org.springframework.web.servlet.handler.AbstractUrlHandlerMapping registerHandler
INFO: Mapped URL path [/ws/family/{familyId}/] onto handler 'familyResource'
Jan 14, 2014 8:29:55 PM org.springframework.web.servlet.FrameworkServlet initServletBean
INFO: FrameworkServlet 'dispatcher': initialization completed in 360 ms
Jan 14, 2014 8:29:55 PM org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/dukegen/ws/family/1] in DispatcherServlet with name 'dispatcher'

这是我的 Controller :

@Controller
@RequestMapping("ws")
public class FamilyResource {

@RequestMapping(value="family/{familyId}", method = RequestMethod.GET, produces="application/json")
public @ResponseBody Family getFamily(@PathVariable long familyId) {
.... builds Family object ....
return family;
}

}

这是我在 web.xml 中设置的调度程序:

 <servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/mvcContext.xml</param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/ws/*</url-pattern>
</servlet-mapping>

我的 mvcContext.xml:

<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">

<context:component-scan base-package="ws.hamacher.dukegen.resource"/>

</beans>

如有任何帮助,我们将不胜感激。

最佳答案

这里有几件事不正确。

首先,在您的请求映射中,映射应该是一致的。您的类应映射到 "/ws" 并且生成结果的方法应为 "/family/{familyId}"

在您的 web.xml 中,您已将 servlet 配置为响应 /ws/* 并且您的 Controller 再次请求映射到 ws。这将不起作用。

一旦 "/ws/*" 被您的 servlet 拦截,它就不应在请求映射中重复。 Controller 仅响应其上下文中的 URL 模式。 URL 中 "/ws" 之后的内容仅在 Controller 的上下文中。

我通常更喜欢将 servlet 映射到 "/" 以及在 Controller 内编码的所有进一步分辨率。不过,这只是我的偏好。

所以正确的配置是

web.xml

    <servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/mvcContext.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

和 Controller

   @Controller
@RequestMapping("/ws")
public class FamilyResource {
@RequestMapping(value="/family/{familyId}", method = RequestMethod.GET, produces="application/json")
public @ResponseBody Family getFamily(@PathVariable long familyId) {
.... builds Family object ....
return family;
}
}

关于spring - 在简单的 Spring 4 REST 服务上获取 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21128275/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com