FeignClient 是一个非常漂亮的工具,但不幸的是,如果您需要做一些与 Spring 之神预期稍有不同的事情,那么您就陷入了痛苦的世界。
当前案例:我与外部第三方 REST 服务合作,该服务具有关于 REST 的有趣概念。特别是,如果您向他们发送正确的 JSON,他们会在正文中返回 HTTP 302 和 JSON。
不用说,FeignClient 真的非常不喜欢这种恶作剧。我的界面:
@FeignClient(value = "someClient", configuration = SomeClientDecoderConfiguration.class)
public interface SomeClient {
@RequestMapping(method = RequestMethod.POST, path = "${someClient.path}",
produces = MediaType.APPLICATION_JSON_VALUE)
JsonOrderCreateResponse orderCreate(JsonOrderCreateRequest request, @RequestHeader("Authorization") String authHeader);
}
Run Code Online (Sandbox Code Playgroud)
我已经有了自定义配置和错误解码器,但这些仅适用于 HTTP 4xx 和 5xx。如果系统遇到302,结果是这样的:
http://pastebin.com/raw/cGKWc4yg
我如何才能防止这种情况并强制 FeignClient 像处理 200 一样处理 302?
在我的原型项目中,我致力于实现非常简单的REST服务 - 服务器(后端)和客户端,实际上也是服务器(前端).后端服务器工作正常,但与客户端我遇到了非常非常奇怪的问题.在Eclipse中,我有一个项目"frontend",它有一个名为FrontEndPageBean.java的bean:
package org.mader.demo.frontend;
import javax.faces.bean.*;
import javax.ws.rs.core.*;
/** Bean to show off frontend handling of REST. */
@ManagedBean
public class FrontEndPageBean
{
/**
* Resolve data from backend through REST service.
* @return Data as text.
*/
public String getRestData()
{ // Retrieve RESTful service using client API from JAX-RS 2.0
ResteasyClient client = new ResteasyClientBuilder().build();
ResteasyWebTarget target = client.target("http://127.0.0.1:8080/backend/rest/data/1");
Response response = target.request().get();
// Read output in string format
String value = response.readEntity(String.class);
System.out.println(value);
response.close();
return value; …Run Code Online (Sandbox Code Playgroud)