【问题标题】:RestTemplate.exchange doesn't work properly. Missing params thrownRestTemplate.exchange 无法正常工作。丢失的参数抛出
【发布时间】:2023-03-26 20:30:01
【问题描述】:

我有 2 个应用程序一个调用另一个。在第一个我有

RestTemplate restTemplate = new RestTemplate();
                HttpHeaders headers = new HttpHeaders();
                MultiValueMap<String, Object> parameters = new LinkedMultiValueMap<>();
                parameters.add("stationFrom", stationfrom);
                parameters.add("stationTo", stationto);
                parameters.add("operator", 5);
                parameters.add("dateTimeFrom", sdfnative.format(sdfeskm.parse(departuredate)));
                parameters.add("dateTimeTo", sdfnative.format(sdfeskm.parse(departuredate).getTime() + 60*60*1000));
                HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(parameters, headers);
                jsonTrain = restTemplate.exchange(url, HttpMethod.GET, request, String.class).toString();

url 定义为全局 http://ip:8090/connection/search 当我查看请求时,我可以看到每个参数都有正确的值,但在 restTemplate.exchange 行中我收到错误“缺少参数 stationFrom”

我在提供的 IP 上的端点看起来像:

@GetMapping(value = "/connection/search")
public ResponseEntity<String> getConnection(@RequestParam(value = "stationFrom") int stationFrom,
                                @RequestParam(value = "stationTo") int stationTo,
                                @RequestParam(value = "operator") int operator,
                                @RequestParam(value = "dateTimeFrom") String dateTimeFrom,
                                @RequestParam(value = "dateTimeTo") String dateTimeTo) throws JSONException

如果 stationFrom 的值为 40 并且我可以在调试/日志中看到它,我不知道为什么它会抛出这个错误

当然,使用相同的数据调用邮递员提供的端点会给我预期的结果:)

【问题讨论】:

    标签: spring-boot rest resttemplate


    【解决方案1】:

    您将查询参数 (RequestParams) 作为标头传递。

    查看以下示例如何传递 RequestParams:

    public void findUserById() 
    {
            String username = "chathuranga";
            String password = "123";
            Integer userId = 1;
    
            String url = "http://localhost:" + port + "/users/" + userId;
    
            //setting up the HTTP Basic Authentication header value
            String authorizationHeader = "Basic " + DatatypeConverter.printBase64Binary((username + ":" + password).getBytes());
    
            HttpHeaders requestHeaders = new HttpHeaders();
            //set up HTTP Basic Authentication Header
            requestHeaders.add("Authorization", authorizationHeader);
            requestHeaders.add("Accept", MediaType.APPLICATION_JSON_VALUE);
    
            //request entity is created with request headers
            HttpEntity<AddUserRequest> requestEntity = new HttpEntity<>(requestHeaders);
    
            //adding the query params to the URL
            UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromHttpUrl(url)
                    .queryParam("name", "chathuranga")
                    .queryParam("email", "chathuranga.t@gmail.com");
    
            ResponseEntity<FindUserResponse> responseEntity = restTemplate.exchange(
                    uriBuilder.toUriString(),
                    HttpMethod.GET,
                    requestEntity,
                    FindUserResponse.class
            );
    
            if (responseEntity.getStatusCode() == HttpStatus.OK) {
                System.out.println("response received");
                System.out.println(responseEntity.getBody());
            } else {
                System.out.println("error occurred");
                System.out.println(responseEntity.getStatusCode());
            }
    }
    

    【讨论】:

    • 谢谢,我认为它有帮助 :) 现在我只是有一些超时,我必须弄清楚
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多