SSM 個人博客地址(歡迎訪問我的個人博客,現開放註冊)
路由傳參問題:
路由一:PaginationUser?page=2&limit=10
路由二:/deleteUser/{id}
如果像是路由二大家一看便知使用@ PathVariable註解實現取值,但是如果像是路由一就有可能犯迷糊了,會使用PaginationUser?page={page}&limit={limit}可以明確的告訴大家使用@ PathVariable註解會報錯,我們的解析器是無法解析的,即使看似什麼都沒有問題,這時候就需要用到我們的@ RequestParam註解了,這個註解不單單有強制要求某一個參數的作用,還可以在這裏實現取值。
@RequestParam 適用於
路由爲 <PaginationUser?page=2&limit=10>
路由後攜帶數據 get 方式
@RequestMapping(path = "/PaginationUser", produces = "application/json;charset=utf-8")
@ResponseBody
public String PaginationUser(@RequestParam(name = "page") Integer page, @RequestParam(name = "limit") Integer limit) {
List<User> users;
if (page == 1) {
users = service.PaginationUser(page - 1, limit);
} else {
users = service.PaginationUser((page - 1) * limit, limit);
}
int count = service.countAll();
// 數據封裝
if (users.size() != 0) {
return "{ \"code\":200,\"msg\":\"成功\",\"data\":" + JSONObject.toJSONString(users) + ",\"count\" : " + count + "}";
} else {
return "{ \"code\":100,\"msg\":\"失敗\",\"data\": [],\"count\" : 0}";
}
}
@PathVariable 適用於
路由爲 </deleteUser/{id}>
由斜杆分開的傳參方式,如果使用<PaginationUser?page={page}&limit={limit}>是無法獲取路由映射的
@RequestMapping(value = "/deleteUser/{id}", produces = "application/json;charset=utf-8")
@ResponseBody
public String deleteUser(@PathVariable(name = "id") Integer id) {
if (service.deleteUser(id)) {
return "{ \"code\":200,\"msg\":\"成功\"}";
} else {
return "{ \"code\":100,\"msg\":\"失敗\"}";
}
}
爲什麼需要序列化?
當數據中含有””或者其他特殊字符時,如果沒有序列化數據,那麼前端將無法解析,導致解析出錯,本質上並不是數據或其他的問題,只需要中間多一步處理便可避免此問題發生。
操作步驟:
將相關bean實現系列化接口,並使用fastjson進行序列化或反序列化處理。
@RequestMapping(value = "/getArticleById/{id}", produces = "application/json;charset=utf-8", method = RequestMethod.GET)
@ResponseBody
public String getArticleById(@PathVariable(name = "id")Integer id) {
Article article = service.getArticleById(id);
if (!article.toString().equals("null")) {
return "{ \"code\":200,\"msg\":\"成功\",\"data\":"+ JSON.toJSONString(article.toString()) +"}";
} else {
return "{ \"code\":100,\"msg\":\"失敗\"}";
}
}
Request header too large問題:
出現此類問題是由於請求頭太大而無法解析的問題,由於tomcat默認對請求頭進行了限定,所以我們可以去tomcat的安裝目錄下找到conf目錄下的server.xml文件,向connector添加屬性,則可以正常解析!
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxHttpHeaderSize ="102400"
/>