我正试图建立一个REST客户端,使用的是我的Web服务的Faignes。Web服务是使用Spring 4构建的,配置为xml bean。
该项目是用Maven构建的,并使用子模块进行结构化
foo-api
--- foo-api-client
------ src/main/java/foo/client
--------- FooClientFactory.java
------ pom.xml
--- foo-api-shared
------ src/main/java/foo/shared
--------- FooClient.java
------ pom.xml
--- foo-api-service
------ src/main
--------- /java/foo/service
------------ /config
--------------- FeignConfiguration.java
------------ /controller
--------------- FooController.java
--------- /webapp/WEB-INF
------------ spring.xml
------------ web.xml
--- pom.xml
为了启用外部客户机,我创建了一个在SpringXML配置上启用的带注释类。
Springxml
...
<context:component-scan base-package="foo.service"/>
<context:annotation-config/>
<bean class="foo.service.config.FeignConfiguration" />
...
装模作样。JAVA
package foo.service.config;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
@EnableFeignClients
public class FeignConfiguration {
}
然后我创建了一个Faignes客户端,并使用注释进行配置
FooClient。JAVA
package foo.shared;
import feign.Headers;
import feign.RequestLine;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PathVariable;
@FeignClient("foo")
public interface FooClient {
@RequestLine("GET /foo/v2/{id}")
@Headers("Accept: " + MediaType.APPLICATION_JSON_VALUE)
Object get(@PathVariable("id") String id);
}
API控制器实现外部客户机,如下所示
FOController.java
package foo.service.controller;
@Controller
@RequestMapping("/foo")
public class FooController implements FooClient {
@Override
@RequestMapping(value = "/v2/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody Object get(@PathVariable("id") String id) {
...
}
...
}
foo-api客户端模块jar被外部客户端用作联系foo-api服务REST服务的依赖项。为了让这些客户端能够轻松使用api,已经创建了一个工厂类来生成一个foClient实例。
食品工厂。JAVA
package foo.client;
import foo.shared.FooClient;
import feign.Feign;
import feign.jackson.JacksonDecoder;
import feign.jackson.JacksonEncoder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service;
@Service
public class FooClientFactory {
@Autowired
private Environment env;
public static final String SERVER_URL_PROPERTY = "foo.api.url";
public FooClient build() {
return Feign.builder()
.encoder(new JacksonEncoder())
.decoder(new JacksonDecoder())
.target(FooClient.class, env.getProperty(SERVER_URL_PROPERTY));
}
}
问题当外部客户端执行对foo Web服务的请求时,使用的是foClientFactoryfoClientFactory.build(). get("id");
返回405错误。以下是客户端控制台上的响应日志:
ERROR [http-nio-8091-exec-1] --- [dispatcherServlet]: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is feign.FeignException: status 405 reading FooClient#get(String); content:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 405 Request method 'POST' not supported</title>
</head>
<body><h2>HTTP ERROR 405</h2>
<p>Problem accessing /foo/v2/{id}. Reason:
<pre> Request method 'POST' not supported</pre></p><hr><a href="http://eclipse.org/jetty">Powered by Jetty:// 9.3.7.v20160115</a><hr/>
</body>
</html>
] with root cause
feign.FeignException: status 405 reading FooClient#getOrder(String); content:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 405 Request method 'POST' not supported</title>
</head>
<body><h2>HTTP ERROR 405</h2>
<p>Problem accessing /foo/v2/{id}. Reason:
<pre> Request method 'POST' not supported</pre></p><hr><a href="http://eclipse.org/jetty">Powered by Jetty:// 9.3.7.v20160115</a><hr/>
</body>
</html>
我在stackoverflow和其他博客上搜索了这种问题,但我一直无法理解整个设置有什么问题。
任何想法?
谢谢你,安德里亚
我在小路上看到两个“foo”。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
这使得路径为/foo/foo/v2/{id}
,但是您应该调用/foo/v2/{id}
。
请尝试删除“/foo”上的内容
我试图用Spring security实现一个简单的登录页面。无论我做什么,当提交表单输入时,我总是得到一个错误< code > Error 405 Request method ' POST ' supported 。相关文件:< br> SecurityConfig.java: SecurityWebApplicationInitializer.java: 我的控制器的一部分: 绒球.xml:
我在这里检查了这么多相同的答案,但似乎没有什么适合我。我有Spring mvc的Spring Security性。当我的用户尝试注册时,我正在向我的控制器发送帖子数据。但它给我405帖子不支持我在安全配置中禁用了csrf令牌。请让我知道我哪里出错了?这是我的webSecurityCon 这是我的注册页面 这是我的主控制器 这是我的签名信息。
在我的项目中,我面临着一个非常奇怪的问题。它与使用spring反应式webclient bulider调用rest API有关。它在本地和prod上也可以正常工作,但在向同一个endpoint发出3或4个请求后,会异常地给出以下错误。“org.springframework.web.server.MethodNotAllowedException:405方法\u不允许“请求方法'T'不受支持”这是
问题内容: 我收到此错误: 我正在尝试做的是创建一个带有下拉框的表单,该表单会根据在另一个下拉框中选择的其他值进行填充。例如,当我在框中选择一个名称时,应运行.jsp页面中的函数,然后提交提交的页面,然后在框中再次加载相应的值。 但是我收到此HTTP状态405错误。我在互联网上搜索了解决方案,但找不到任何有帮助的方法。这是我的代码的相关部分: jsp页面的一部分 控制器的一部分: 我怎么会得到这个
我收到这个错误:< code>HTTP状态405 -不支持请求方法“POST ” 我想做的是创建一个带有下拉框的表单,该下拉框根据在另一个下拉框中选择的其他值进行填充。例如,当我在框中选择一个名称时,应该运行. jsp页面中的函数,然后提交的页面再次加载框中的相应值。 但是我收到此HTTP状态405错误。我已经在互联网上搜索了解决方案,但找不到任何有帮助的东西。以下是我的代码的相关部分: jsp页
我有Spring MVC的Spring Security。当我尝试注册时,它给了我405个不支持的“帖子”。我已在安全配置中禁用csrf令牌。让我知道我哪里出错了? 我的登录页面: 授权由LoginController处理: 这是我的Spring Security配置类: