返回json數據要點及其他ssm注意事項

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"
    />
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章