1. 程式人生 > >springboot controller 中新建一個控制器類 提示該類從未被使用

springboot controller 中新建一個控制器類 提示該類從未被使用

 

java web專案

springboot框架

webapi前後端分離

看了一篇文章

從文章中提到的github上拉取的程式碼

 

在springboot中新建一個控制器類,卻提示該類從未被使用?

是因為建立控制器類的位置不對麼?要在主類的包下新建Controller包,然後在這個包裡,新建比如HomeController類?

那如果我確實是在這個位置建的,同一個包下還有UserController類,而且該類是可用的,沒有提示從未被使用過,那麼原因又

是什麼呢?

 

不管提示,點選執行,看看會發生什麼。

未被使用的提示竟然沒有了!

 

不過,有一個新的問題,就是瀏覽器中或postman中,輸入該控制器的方法對應的url,處理請求的好像不是相應的方法啊!

多次嘗試後,發現HomeController中有一個方法login,請求的完整url是http://localhost:8081/login,不管login位置寫的是什麼,

請求的好像都是UserController中的一個方法,這是為什麼呢?

 

我發現UserController中也有一個login的方法,但是完整的url是http://localhost:8080/user/login,難道這就是原因?
 

好吧,兩個login確實實現的是相同的功能,都是驗證使用者,給合法使用者返回Authorization。

 

新的問題又出現了:Content type 'multipart/form-data;boundary=-------------------------

-255590055236865295282673;charset=UTF-8' not supported  這是利用postman請求http://localhost:8080/user/login時出現的問

題。post請求,Body中宣告兩個引數,ussername和password,文章中就只有這些了,按那篇文章寫的,應該返回一個token

了啊。是post請求設定哪裡有不對麼?還是程式碼有問題呢?

 

我發現UserController類中的login方法的引數是

@RequestBody User user

所以我上網查了下@RequestBody:

  1、@RequestBody註解常用來處理content-type不是預設的application/x-www-form-urlcoded編碼的內容,比如說:application/json或者是application/xml等。一般情況下來說常用其來處理application/json型別。

  2、

    通過@requestBody可以將請求體中的JSON字串繫結到相應的bean上,當然,也可以將其分別繫結到對應的字串上。
    例如說以下情況:
    $.ajax({
        url:"/login",
        type:"POST",
        data:'{"userName":"admin","pwd","admin123"}',
        content-type:"application/json charset=utf-8",
        success:function(data){
          alert("request success ! ");
        }
    });

    @requestMapping("/login")
    public void login(@requestBody String userName,@requestBody String pwd){
      System.out.println(userName+" :"+pwd);
    }
    這種情況是將JSON字串中的兩個變數的值分別賦予了兩個字串,但是呢假如我有一個User類,擁有如下欄位:
      String userName;
      String pwd;
    那麼上述引數可以改為以下形式:@requestBody User user 這種形式會將JSON字串中的值賦予user中對應的屬性上
    需要注意的是,JSON字串中的key必須對應user中的屬性名,否則是請求不過去的。

 3、

    在一些特殊情況@requestBody也可以用來處理content-type型別為application/x-www-form-urlcoded的內容,只不過這種方式

    不是很常用,在處理這類請求的時候,@requestBody會將處理結果放到一個MultiValueMap<String,String>中,這種情況一般在
    特殊情況下才會使用,
    例如jQuery easyUI的datagrid請求資料的時候需要使用到這種方式、小型專案只建立一個POJO類的話也可以使用這種接受方式

 

所以我做了一些更改,1、在Headers中新增Content_Type引數,值為application/json,在Body中選擇raw,在下面輸入:

{"username":"admin","password","1234"}

 

結果是:

{
    "ok": true,
    "msg": "",
    "data": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsInJvbGVzIjoidXNlciIsImlhdCI6MTU0NTYxOTM4MCwiZXhwIjoxNTQ1NjIwNTgwfQ.wcezy0pUBBYFqEBmIsOK3zYRsMN3GZqYuMxg_w5zt_I"
}

 

成功了!