簡體   English   中英

@RequestParam沒有映射整個字符串

[英]@RequestParam not mapping entire string

我有一個Get端點,它接受一個查詢字符串作為請求參數。 端點的問題是請求參數字符串可以包含像?,/ etc這樣的字符,這會導致問題。有沒有辦法將包含?,/ etc的字符串映射到休息控制器中的變量?

已經嘗試過使用@PathVariable而不是使用@RequestParam,但它仍然沒有正確讀取值。 當使用@PathVariable映射uri時,? 正在被省略。 使用@RequestParam時,它會拋出Exception.Stacktrace。

@GetMapping("/getResult")
public @ResponseBody ResponseEntity<String> getData(@RequestParam(value="text") String text) {
    //Call to service layer passing text as a param
    return new ResponseEntity<String>("GET Response", HttpStatus.OK);
}

URL : 'localhost/getResult?text=How you doing?'

堆棧跟蹤:

java.lang.IllegalArgumentException:方法名稱中找到無效字符。 HTTP方法名稱必須是令牌錯誤解析HTTP請求標頭注意:將在DEBUG級別記錄更多出現的HTTP標頭解析錯誤。

java.lang.IllegalArgumentException:方法名稱中找到無效字符。 HTTP方法名稱必須是org.apache.coyote上的org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:422)〜[tomcat-embed-core-8.5.14.jar:8.5.14]中的標記。 http:http://www.http11Processor.service(Http11Processor.java:683)〜[tomcat-embed-core-8.5.14.jar:8.5.14] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)[tomcat- embed-core-8.5.14.jar:8.5.14] at org.apache.coyote.AbstractProtocol $ ConnectionHandler.process(AbstractProtocol.java:861)[tomcat-embed-core-8.5.14.jar:8.5.14] org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1455)[tomcat-embed-core-8.5.14.jar:8.5.14] at org.apache.tomcat.util.net .SocketProcessorBase.run(SocketProcessorBase.java:49)[tomcat-embed-core-8.5.14.jar:8.5.14] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[na:1.8。 0_05] at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)[na:1.8.0_05] at org.apache.tomcat.util.thr eads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)[tomcat-embed-core-8.5.14.jar:8.5.14] at java.lang.Thread.run(Thread.java:745)[na:1.8 .0_05]

對於預期的結果,我想映射字符串“你好嗎?” 到一個路徑變量或查詢param變量,整個字符串完整,而不是'?' 被省略了。

如果您直接從瀏覽器或卷曲或郵遞員調用網址。 你應該對不同的特殊字符使用編碼,比如空格編碼是%20。 這意味着當你寫“你好嗎?” 這將是網址中“如何%20are%20you%3F” 有關更多信息,請參閱此站點

如果呼叫來自任何編程語言。 請使用URL編碼器。

提供Java解決方案:
您可以使用URLEncoder來實現您想要的:

URLEncoder enc = new URLEncoder();
enc.encode(String toEncode, String charset)

還有一種方法只接受要編碼的字符串,但不推薦使用此字符串。

如果您從Javascript客戶端調用,則可以使用encodeURIComponent()

https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

question mark(?)編碼為%3F ,你就可以了。

沒有其他方法可以在查詢中發送問號,因為它是一個特殊字符

您需要在URL中使用特殊字符對參數進行編碼。 您可以從前端使用encodeURIComponent

如果您使用郵遞員,則需要在預請求腳本中設置以下內容,

var encoded = encodeURIComponent(postman.getEnvironmentVariable("text"));
postman.setEnvironmentVariable("encoded text", encoded);

暫無
暫無

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

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