遇到的問題:
今日份的工作任務之一,是需要將師兄寫好的代碼,整合到項目中來,在修改的過程中遇到一些問題,一直提示
request.getInputStream().read()
這句語句執行後,buffer並沒有獲取到相應的值。
開始進行嘗試解決這個問題,首先覈對了下師兄那裏可以跑通的代碼:
請求頭如下所示:
參數,表單數據如下所示:
劃重點,Content-type爲application/x-www-form-urlencoded,這意味着:
1.轉換爲Spring Boot的時候,需要採用@ResponseBody或@ResponseParam來接收到這些表單數據
2.需要進行url轉碼
解決方式:
首先將如下內容:
@POST
@Path("test")
@Produces({MediaType.APPLICATION_JSON})
public String getTest(@Context HttpServletRequest request){
}
修改爲:
@RequestMapping(value = "/test", method = RequestMethod.POST, produces="application/json")
@Timed
public String getTest(@Context HttpServletRequest request,@RequestBody String query) throws IOException{
}
而後,將原本讀入數據的部分:
try {
int contentLength = request.getContentLength();
byte buffer[] = new byte[contentLength];
for (int i = 0; i < contentLength;) {
int readlen = request.getInputStream().read(buffer, i,
contentLength - i);
if (readlen == -1) {
break;
}
i += readlen;
}
String query = new String(buffer, "UTF-8");
...
}
作如下修改:
try {
query = URLDecoder.decode(query, "UTF-8");
....
}
這樣問題就可以得到解決了。
涉及的知識點:
1.URL解碼與編碼
//編碼
String strUTF8 = URLEncoder.encode(strTest, "UTF-8");
//解碼
String strUTF8 = URLDecoder.decode(strTest, "UTF-8");
//也可以GBK等編碼格式指定