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"
}
成功了!