簡體   English   中英

Spring中的rest模板如何處理請求參數中具有哈希值的get請求url

[英]How the get request url which has hash in the request param is handled by the rest template in Spring

我沒有得到下面提到的請求 url 的響應,盡管 url 和 param 值是正確的。 僅供參考,請求參數值中有一個哈希符號,我正在從客戶端對其進行編碼,以便請求不會被截斷。 響應是狀態 500 和錯誤代碼 400 錯誤請求。 不知道是什么問題。

請求 URL 已通過:

https://localhost:8080/v3/getdata?problemType=Netting&equipmentType=All%20refrigeration&problemCode=Damaged%20upright%20Please%20refer%20to%20Spec%20%2313300&locationId=2005511287

回復:

{
   "timestamp": 1549916785930,
   "status": 500,
   "error": "Internal Server Error",
   "message": "400 Bad Request",
   "path": "/v3/getdata"
 }

調用方式:

public String getData(String url) throws BusinessException {

RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("Authorization", "Bearer " + getAuthenticateToken());
HttpEntity<String> entity = new HttpEntity<>(headers);
String completeURL = BaseURL+"/"+url;
logger.info(completeURL);
ResponseEntity<String> result = restTemplate.exchange(completeURL, HttpMethod.GET, entity, String.class);

System.out.println("Result:: "+result);
try {
    if ((result.getStatusCode() == HttpStatus.OK))
        return result.getBody();
} catch (Exception e) {
    e.printStackTrace();
}
throw new BusinessException(result.getStatusCodeValue(), 
  result.getBody());
  }

錯誤

2019-02-11 15:26:25.900 ERROR 14328 --- [nio-8080-exec-9] oaccC[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] 在上下文中路徑[]拋出異常[請求處理失敗; 嵌套異常是 org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request] 的根本原因

org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:79) ~[spring-web-5.1.3.RELEASE.jar:5.1。 3.RELEASE] 在 org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:122) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 org.springframework.web。 client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:102) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63) ) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:777) ~[spring-web-5.1.3. RELEASE.jar:5.1.3.RELEASE] 在 org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:735) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在org.springframework.web.client.RestTemplate.execute (RestTemplate.java:669) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:578) ~[spring- web-5.1.3.RELEASE.jar:5.1.3.RELEASE] 在 com.walmart.fixit.ws.utils.Utils.getDataFromSC(Utils.java:118) ~[classes/:na]

使用 URI 類再次編碼 # 字符並轉換為字符串,如下所示。 有效。

請張貼,如果您有任何不同的方法使其工作。

   String completeURL = scBaseURL+"/"+scBasePath;
   URI uri = URI.create(completeURL.replace(" ","%20").replace("#","%23"));
   System.out.println(uri.toString());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM