当前位置: 首页 > 知识库问答 >
问题:

GET请求在Postman中工作,但不能与SpringBoot RestTemplate一起使用

白镜
2023-03-14

我有一个两个Spring Boot应用程序。一个是进行rest调用的rest客户端。另一个只有Restendpoint的应用程序。

当rest客户机到达Restendpoint时,它会失败。

这是用于命中restendpoint的代码:

HttpHeaders headers = new HttpHeaders();
headers.set(ACCEPT, APPLICATION_JSON);
headers.set(CONTENT_TYPE, APPLICATION_JSON);
HttpEntity entity = new HttpEntity(headers);

UriComponentsBuilder builder = UriComponentsBuilder
    .fromHttpUrl(url)

    .queryParam(EMAIL, URLEncoder.encode(email, "UTF-8"))
    .queryParam(ADDRESS, URLEncoder.encode(address, "UTF-8"));

ResponseEntity<Address> response = 
commonRestTemplate
    .exchange(builder.toUriString(), 
HttpMethod.GET, entity, Address.class);

这是客户端尝试访问的其余endpoint:

@RestController
@AllArgsConstructor
public class AddressController {
    private final RestTemplate commonRestTemplate;

    // constructor and other rest endpoints


    @RequestMapping(value = "/", method = RequestMethod.GET)
    public @ResponseBody ResponseEntity<Address> getAddress(@RequestParam String email, @RequestParam String address) {
        try {
            // do soemthing
        } catch (RuntimeException e) 
        {
            LOGGER.error(e.getMessage(), e);
            return status(HttpStatus.INTERNAL_SERVER_ERROR).build();
        }
   }
}

这是我在带有restendpoint的应用程序中看到的错误:

2020-03-26 16:33:53.619  WARN 9 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'address' is not present]

2020-03-26 16:50:02.691 ERROR 9 --- [nio-8080-exec-9] u.c.h.s.s.controller.AddressController      : Key may not be empty

为什么 Rest 调用适用于邮递员而不是我的 rest 客户端?

我也尝试过在rest客户端中对特殊字符进行编码和不编码,但运气不好。我似乎看不到我错过了什么

共有3个答案

酆耀
2023-03-14

可以是2个问题:

    < li >静态地址定义正确,指的是“地址”。 < li >另一个,地址值不为空。在调用restTemplate之前打印地址值。
曹普松
2023-03-14

我也有这个问题。当我在交换方法中使用 uri 而不是字符串时,它已解决。

ResponseEntity<String> responseEntity = null;
Map<String, String> map = generate map to keep key and value of necessaryparameters;
UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromHttpUrl("SERVICE_URL");
map.forEach((k, v) -> {
    uriComponentsBuilder.queryParam(k, v);
});
URI uri = uriComponentsBuilder.build(false).encode("windows-1256").toUri();
responseEntity = new RestTemplate().exchange(uri, HttpMethod.POST, request, String.class);
岳俊晖
2023-03-14

尝试以下更改

UriComponentsBuilder builder = UriComponentsBuilder .fromHttpUrl(url) .queryParam(“email”, URLEncoder.encode(email, “UTF-8”)

.queryParam(“address”, URLEncoder.encode(address, “UTF-8”));

@RestController
@AllArgsConstructor
public class AddressController {
private final RestTemplate commonRestTemplate;

// constructor and other rest endpoints


@RequestMapping(value = "/", method = RequestMethod.GET)
public @ResponseBody ResponseEntity<Address> getAddress(@RequestParam("email") String email, @RequestParam("address") String address) {
    try {
        // do soemthing
    } catch (RuntimeException e) 
    {
        LOGGER.error(e.getMessage(), e);
        return status(HttpStatus.INTERNAL_SERVER_ERROR).build();
    }
 }
}
 类似资料:
  • 当我试图通过邮递员发送时,我有一个请求正在正常工作。我试图实现相同的使用代码,我面临一个错误。 我正在使用的代码- 我得到的错误是- org.springframework.web.client.HttpClientErr异常$未授权: 401未授权 但《邮递员》中同样的作品也有同样的细节。 我想说明一下 后端API不在我手里。 clientid,clientSecret,access_token

  • 3)使用REST客户端 将response_resclient.code 对于1和2,两者都是正确的。它们都返回状态201,登录成功,但使用3-REST_Client失败。状态为404 REST_Client: 对于Rest-client gem,它在向mysite.vn发送post请求后返回404错误,代码为443。我对这个案子没有理想。请你帮我解释一下这个案子好吗。如何用REST客户端纠正这个

  • 我将GET请求发送到具有相同标头的相同endpoint,包括承载,但当我从Postman调用时得到200和正确的JSON,当我在我的(Vue)项目中使用Axios发送请求时,我得到302。 运行在localhost:8080(如果有用)上的本地项目的调用如下: 而在《邮递员》中,我所做的就是用相同的url创建一个GET请求,我在标题中添加的只是“承载者…” 我从axios得到的错误是: 响应状态是

  • 我正在尝试调用Workday招聘网络服务的Put_Background_Check操作。我已经在SoapUI中打开了WSDL文件,并成功地发送了以下XML。。。 我得到以下回应。。。 问题是,当我试图在Postman(或cURL或Python请求)中用相同的标题重新创建相同的POST请求时,我会得到无效的用户名或密码错误。SoapUI在这里做什么特别的事情吗?本案的回应如下...

  • 请求在Postman/Java中失败,但在RESTClient中工作…以下是请求,并附上错误的截图。 这是一个POST请求 {“username”:“test”,“password”:“test”,“simulate_user”:“test”,“sourcetabledesc”:“testlist100”,“联系人”:[{“组织”:“ckt”,“workphone”:“12315423”,“fir

  • 这是我得到的错误: 通用域名格式。谷歌。格森。JsonSyntaxException:java。lang.IllegalStateException:应为BEGIN_对象,但在第1行第1列路径处为字符串$ 我从邮递员那里得到的JSON回复: 这就是我如何响应rest API(使用slim2框架)的响应: 回声响应方法: 调用API的方法: APIServie界面: 我如何获得实例: 我发布所有这些