spring入門:常用註解(web開發:controller、restcontroller)

 

在 Spring Boot 中,@Controller 註解是專門用於處理 Http 請求處理的,是以 MVC 爲核心的設計思想的控制層。@RestController 則是 @Controller 的衍生註解。

本項目源碼下載

1 Spring Boot Controller

1.1 原理

Spring Boot 本身就 Spring MVC 的簡化版本。是在 Spring MVC 的基礎上實現了自動配置,簡化了開發人員開發過程。

Spring MVC 是通過一個叫 DispatcherServlet 前端控制器的來攔截請求的。而在 Spring Boot 中 使用自動配置把 DispatcherServlet 前端控制器自動配置到框架中。

例如,我們來解析 /users 這個請求

/users請求流程

  1. DispatcherServlet 前端控制器攔截請求 /users
  2. servlet 決定使用哪個 handler 處理
  3. Spring 檢測哪個控制器匹配 /users,Spring 從 @RquestMapping 中查找出需要的信息
  4. Spring 找到正確的 Controller 方法後,開始執行 Controller 方法
  5. 返回 users 對象列表
  6. 根據與客戶端交互需要返回 Json 或者 Xml 格式

1.2 相關注解

在 Spring Boot 中使用到 @Controller 及相關的註解如下,主要分爲三個層面進行,請求前,處理中,返回。

應用場景 註解 註解說明
處理請求 @Controller 處理 Http 請求
處理請求 @RestController @Controller 的衍生註解
路由請求 @RequestMapping 路由請求 可以設置各種操作方法
路由請求 @GetMapping GET 方法的路由
路由請求 @PostMapping POST 方法的路由
路由請求 @PutMapping PUT 方法的路由
路由請求 @DeleteMapping DELETE 方法的路由
請求參數 @PathVariable 處理請求 url 路徑中的參數 /user/{id}
請求參數 @RequestParam 處理問號後面的參數
請求參數 @RequestBody 請求參數以json格式提交
返回參數 @ResponseBody 返回 json 格式

注意以上註解需要強調的是 @RestController 是 @Controller 的子集。

@GetMapping、@PostMapping、@PutMapping、@DeleteMapping 是 @RequestMapping 的子集。所以實際上我們只需要掌握 @Controller 和 @RequestMapping 就可以了。

1.3 @Controller 與 @RestController 區別

@Controller 包括了 @RestController。@RestController 是 Spring4 後新加的註解,從 RestController 類源碼可以看出 @RestController 是 @Controller 和 @ResponseBody 兩個註解的結合體。

@Controller=@RestController+@ResponseBody
如下 @RestController 的源碼可以看出他們的關係

<span style="color:#333333"><code><span style="color:#2b91af">@Target</span>({ElementType.TYPE})
<span style="color:#2b91af">@Retention</span>(RetentionPolicy.RUNTIME)
<span style="color:#2b91af">@Documented</span>
<span style="color:#2b91af">@Controller</span>
<span style="color:#2b91af">@ResponseBody</span>
<span style="color:#0000ff">public</span> <span style="color:#2b91af">@interface</span> RestController {
    <span style="color:#2b91af">@AliasFor</span>(
        annotation = Controller.class
    )
    String <span style="color:#a31515">value</span>() <span style="color:#0000ff">default</span> "";
}
</code></span>

1.4 @Controller 與 @RestController應用場景

  • @Controller 一般應用在有返回界面的應用場景下.

    例如,管理後臺使用了 thymeleaf 作爲模板開發,需要從後臺直接返回 Model 對象到前臺,那麼這時候就需要使用 @Controller 來註解。

  • @RestController 如果只是接口,那麼就用 RestController 來註解.

    例如前端頁面全部使用了 Html、Jquery來開發,通過 Ajax 請求服務端接口,那麼接口就使用 @RestController 統一註解。

1.5 @RequestMapping 說明

首先我們來看看 @RequestMapping 的源碼,我在上面加了註釋

<span style="color:#333333"><code><span style="color:#2b91af">@Target</span>({ElementType.TYPE, ElementType.METHOD})
<span style="color:#2b91af">@Retention</span>(RetentionPolicy.RUNTIME)
<span style="color:#2b91af">@Documented</span>
<span style="color:#2b91af">@Mapping</span>
<span style="color:#0000ff">public</span> <span style="color:#2b91af">@interface</span> RequestMapping {
    String <span style="color:#a31515">name</span>() <span style="color:#0000ff">default</span> "";

    <span style="color:#008000">//指定請求的實際地址</span>
    <span style="color:#2b91af">@AliasFor</span>(<span style="color:#a31515">"path"</span>)
    String[] value() <span style="color:#0000ff">default</span> {};
    <span style="color:#2b91af">@AliasFor</span>(<span style="color:#a31515">"value"</span>)
    String[] path() <span style="color:#0000ff">default</span> {};
    <span style="color:#008000">//指定請求的method類型, GET、POST、PUT、DELETE等</span>
    RequestMethod[] method() <span style="color:#0000ff">default</span> {};
    <span style="color:#008000">//指定request中必須包含某些參數值是,才讓該方法處理。</span>
    String[] params() <span style="color:#0000ff">default</span> {};
    <span style="color:#008000">//指定request中必須包含某些指定的header值,才能讓該方法處理請求。</span>
    String[] headers() <span style="color:#0000ff">default</span> {};
    <span style="color:#008000">//指定處理請求的提交內容類型(Content-Type),例如application/json, text/html;</span>
    String[] consumes() <span style="color:#0000ff">default</span> {};
    <span style="color:#008000">//指定返回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回;</span>
    String[] produces() <span style="color:#0000ff">default</span> {};
}</code></span>

示例說明:

示例 說明
@RequestMapping("/index") 默認爲 GET 方法的路由 /index
@RequestMapping(value="/index",method = RequestMethod.GET) 同上面一條
@RequestMapping(value="/add",method = RequestMethod.POST) 路由爲 /add 的 POST 請求
@RequestMapping(value="/add",method = RequestMethod.POST),consumes="application/json" 路由爲 /add 的 POST 請求,但僅僅處理 application/json 的請求
@RequestMapping(value="/add",method = RequestMethod.POST),produces="application/json" 路由爲 /add 的 POST 請求,強調返回爲 JSON 格式
@RequestMapping(value="/add",method = RequestMethod.POST),params="myParam=xyz" 路由爲 /add 的 POST 請求,但僅僅處理頭部包括 myParam=xyz 的請求
@RequestMapping(value="/add",method = RequestMethod.POST),headers="Referer=http://www.xyz.com/" 路由爲 /add 的 POST 請求,但僅僅處理 來源爲 www.xyz.com 的請求

2 @Controller 和 @RestController 示例

本章節,將對兩個註解配合其他註解編寫一系列示例,爲了演示 @Controller 返回對應頁面功能,我們在示例中引入了 thymeleaf 模板。具體在 pom.xml 中有說明。

編號 路由 Http方法 方法說明
1 /user/index GET 獲取用戶列表並返回列表頁面
1 /user/add GET 用戶新增頁面
1 /user/save POST 新增用戶的api
1 /user/edit GET 用戶編輯的頁面
1 /user/update POST 編輯用戶的api
1 /user/del GET 刪除用戶頁面
1 /user/deleted POST 刪除用戶頁面的api

2.1 新建 Spring Boot 項目

  1. File > New > Project,如下圖選擇 Spring Initializr 然後點擊 【Next】下一步
  2. 填寫 GroupId(包名)、Artifact(項目名) 即可。點擊 下一步
    groupId=com.fishpro
    artifactId=restcontroller
  3. 選擇依賴 Spring Web Starter 前面打鉤,在模板列中勾選 thymeleaf
  4. 項目名設置爲 spring-boot-study-restcontroller.

2.2 依賴 Pom.xml 配置

本項目引入了 web 和 thymeleaf ,具體一人如下代碼:

<span style="color:#333333"><code><span style="color:#0000ff"><<span style="color:#0000ff">dependencies</span>></span>
        <span style="color:#0000ff"><<span style="color:#0000ff">dependency</span>></span>
            <span style="color:#0000ff"><<span style="color:#0000ff">groupId</span>></span>org.springframework.boot<span style="color:#0000ff"></<span style="color:#0000ff">groupId</span>></span>
            <span style="color:#0000ff"><<span style="color:#0000ff">artifactId</span>></span>spring-boot-starter-thymeleaf<span style="color:#0000ff"></<span style="color:#0000ff">artifactId</span>></span>
        <span style="color:#0000ff"></<span style="color:#0000ff">dependency</span>></span>
        <span style="color:#0000ff"><<span style="color:#0000ff">dependency</span>></span>
            <span style="color:#0000ff"><<span style="color:#0000ff">groupId</span>></span>org.springframework.boot<span style="color:#0000ff"></<span style="color:#0000ff">groupId</span>></span>
            <span style="color:#0000ff"><<span style="color:#0000ff">artifactId</span>></span>spring-boot-starter-web<span style="color:#0000ff"></<span style="color:#0000ff">artifactId</span>></span>
        <span style="color:#0000ff"></<span style="color:#0000ff">dependency</span>></span>

        <span style="color:#0000ff"><<span style="color:#0000ff">dependency</span>></span>
            <span style="color:#0000ff"><<span style="color:#0000ff">groupId</span>></span>org.springframework.boot<span style="color:#0000ff"></<span style="color:#0000ff">groupId</span>></span>
            <span style="color:#0000ff"><<span style="color:#0000ff">artifactId</span>></span>spring-boot-starter-test<span style="color:#0000ff"></<span style="color:#0000ff">artifactId</span>></span>
            <span style="color:#0000ff"><<span style="color:#0000ff">scope</span>></span>test<span style="color:#0000ff"></<span style="color:#0000ff">scope</span>></span>
        <span style="color:#0000ff"></<span style="color:#0000ff">dependency</span>></span>
    <span style="color:#0000ff"></<span style="color:#0000ff">dependencies</span>></span>
</code></span>

並把配置文件重命名爲 application.yml ,修改默認測試端口

server:
  port: 8087

2.3 基於 @Controller 的示例代碼

本代碼實例中新增瞭如下頁面,注意 templates 表示 /resources/tempalates/controller 表示 com.fishpro.restcontroller.controller 包。

  • controller/UserController.java 控制層-用戶類
  • domain/UserDO.java 用戶控實體類
  • templates/user/index.html 視圖-用戶列表頁面
  • templates/user/add.html 視圖-新增用戶頁面
  • templates/user/edit.html 視圖-編輯用戶頁面

2.3.1 返回用戶列表信息 /user/index

本項目源碼下載

首先構件一個虛擬的用戶數據

<span style="color:#333333"><code>  <span style="color:#008000">/**
     * 模擬一組數據
     * */</span>
    <span style="color:#0000ff">private</span> List<UserDO> <span style="color:#a31515">getData</span>(){
        List<UserDO> list=<span style="color:#0000ff">new</span> ArrayList<>();

        UserDO userDO=<span style="color:#0000ff">new</span> UserDO();
        userDO.setUserId(1);
        userDO.setUserName(<span style="color:#a31515">"admin"</span>);
        list.add(userDO);

        userDO=<span style="color:#0000ff">new</span> UserDO();
        userDO.setUserId(2);
        userDO.setUserName(<span style="color:#a31515">"heike"</span>);
        list.add(userDO);

        userDO=<span style="color:#0000ff">new</span> UserDO();
        userDO.setUserId(3);
        userDO.setUserName(<span style="color:#a31515">"tom"</span>);
        list.add(userDO);

        userDO=<span style="color:#0000ff">new</span> UserDO();
        userDO.setUserId(4);
        userDO.setUserName(<span style="color:#a31515">"mac"</span>);
        list.add(userDO);

        <span style="color:#0000ff">return</span>  list;
    }</code></span>

1 創建一個用戶列表頁面 /user/index

UserController 增加方法如下圖所示,使用 @RequestMapping 註解,注意 @RequestMapping(method = RequestMethod.GET,value = "/index") 等於 @RequestMapping(value = "/index") 也等於 @RequestMapping("/index") 也等於 @GetMapping("/index")

<span style="color:#333333"><code> <span style="color:#008000">/**
     * GET  返回用戶列表信息
     * */</span>
    <span style="color:#2b91af">@RequestMapping</span>(method = RequestMethod.GET,value = <span style="color:#a31515">"/index"</span>)
    <span style="color:#0000ff">public</span> String <span style="color:#a31515">index</span>(Model model){
        List<UserDO> list =getData();
        model.addAttribute(<span style="color:#a31515">"list"</span>,list);<span style="color:#008000">//返回 用戶 list</span>
        <span style="color:#0000ff">return</span> <span style="color:#a31515">"user/index"</span>;
    }

    </code></span>

2 創建 templates/index.html 對應上面的路由 /user/index

<span style="color:#333333"><code><span style="color:#2b91af"><!DOCTYPE html></span>
<span style="color:#0000ff"><<span style="color:#0000ff">html</span> <span style="color:#ff0000">lang</span>=<span style="color:#a31515">"en"</span>></span>
<span style="color:#0000ff"><<span style="color:#0000ff">head</span>></span>
    <span style="color:#0000ff"><<span style="color:#0000ff">meta</span> <span style="color:#ff0000">charset</span>=<span style="color:#a31515">"UTF-8"</span>></span>
    <span style="color:#0000ff"><<span style="color:#0000ff">title</span>></span>Title<span style="color:#0000ff"></<span style="color:#0000ff">title</span>></span>
<span style="color:#0000ff"></<span style="color:#0000ff">head</span>></span>
<span style="color:#0000ff"><<span style="color:#0000ff">body</span>></span>
<span style="color:#0000ff"><<span style="color:#0000ff">div</span> <span style="color:#ff0000">class</span>=<span style="color:#a31515">"title"</span>></span>

<span style="color:#0000ff"></<span style="color:#0000ff">div</span>></span>
<span style="color:#0000ff"><<span style="color:#0000ff">div</span> <span style="color:#ff0000">th:each</span>=<span style="color:#a31515">"user :${list}"</span>></span>
    用戶ID:<span style="color:#0000ff"><<span style="color:#0000ff">span</span> <span style="color:#ff0000">th:text</span>=<span style="color:#a31515">"${user.userId}"</span>></span><span style="color:#0000ff"></<span style="color:#0000ff">span</span>></span>
    用戶名:<span style="color:#0000ff"><<span style="color:#0000ff">span</span> <span style="color:#ff0000">th:text</span>=<span style="color:#a31515">"${user.userName}"</span>></span><span style="color:#0000ff"></<span style="color:#0000ff">span</span>></span>
<span style="color:#0000ff"></<span style="color:#0000ff">div</span>></span>
<span style="color:#0000ff"></<span style="color:#0000ff">body</span>></span>
<span style="color:#0000ff"></<span style="color:#0000ff">html</span>></span></code></span>

3 在瀏覽器中查看

右鍵 RestControllerApplication > Run 在瀏覽器輸入 http://localhost:8087/user/index

<span style="color:#333333"><code>用戶ID:1 用戶名:admin
用戶ID:2 用戶名:heike
用戶ID:3 用戶名:tom
用戶ID:4 用戶名:mac</code></span>

2.3.3 新增用戶頁面 /user/add

本項目源碼下載

在 UserController 中增加 add 路由 /user/add

UserController 增加方法如下圖所示,使用 @RequestMapping 註解,並創建了兩個路由

  • /user/add 對應前端頁面
  • /user/save 對應前端頁面提交按鈕的接口
<span style="color:#333333"><code> <span style="color:#008000">/**
     * GET 返回add頁面
     * <span style="color:#808080">@GetMapping</span>("/add") = <span style="color:#808080">@RequestMapping</span>(method = RequestMethod.GET,value = "/add")
     * */</span>
    <span style="color:#2b91af">@GetMapping</span>(<span style="color:#a31515">"/add"</span>)
    <span style="color:#0000ff">public</span> String <span style="color:#a31515">add</span>(){
        <span style="color:#0000ff">return</span> <span style="color:#a31515">"user/add"</span>;
    }
    <span style="color:#008000">/**
     * POST 新增用戶api
     * <span style="color:#808080">@return</span> 返回 map對象
     * */</span>
    <span style="color:#2b91af">@RequestMapping</span>(method = RequestMethod.POST,value = <span style="color:#a31515">"/save"</span>)
    <span style="color:#2b91af">@ResponseBody</span>
    <span style="color:#0000ff">public</span> Object <span style="color:#a31515">save</span>(UserDO user){
        List<UserDO> list= getData();
        list.add(user);<span style="color:#008000">//模擬向列表中增加數據</span>
        Map<String,Object> map=<span style="color:#0000ff">new</span> HashMap<>();
        <span style="color:#0000ff">if</span>(<span style="color:#0000ff">null</span>==user){

            map.put(<span style="color:#a31515">"status"</span>,3);
            map.put(<span style="color:#a31515">"message"</span>,<span style="color:#a31515">"沒有傳任何對象"</span>);
            <span style="color:#0000ff">return</span>  map;
        }
        map.put(<span style="color:#a31515">"status"</span>,0);
        map.put(<span style="color:#a31515">"data"</span>,user);
        <span style="color:#0000ff">return</span>  map;
    }
</code></span>

創建 templates/add.htm 文件對應路由 /user/add

在對應的 templates/add.html中增加代碼

<span style="color:#333333"><code><span style="color:#2b91af"><!DOCTYPE html></span>
<span style="color:#0000ff"><<span style="color:#0000ff">html</span> <span style="color:#ff0000">lang</span>=<span style="color:#a31515">"en"</span>></span>
<span style="color:#0000ff"><<span style="color:#0000ff">head</span>></span>
    <span style="color:#0000ff"><<span style="color:#0000ff">meta</span> <span style="color:#ff0000">charset</span>=<span style="color:#a31515">"UTF-8"</span>></span>
    <span style="color:#0000ff"><<span style="color:#0000ff">title</span>></span>用戶新增頁面<span style="color:#0000ff"></<span style="color:#0000ff">title</span>></span>
    <span style="color:#0000ff"><<span style="color:#0000ff">script</span> <span style="color:#ff0000">src</span>=<span style="color:#a31515">"https://cdn.bootcss.com/jquery/1.11.3/jquery.js"</span>></span><span style="color:#0000ff"></<span style="color:#0000ff">script</span>></span>
<span style="color:#0000ff"></<span style="color:#0000ff">head</span>></span>
<span style="color:#0000ff"><<span style="color:#0000ff">body</span>></span>
<span style="color:#0000ff"><<span style="color:#0000ff">form</span> <span style="color:#ff0000">id</span>=<span style="color:#a31515">"form1"</span>></span>
    <span style="color:#0000ff"><<span style="color:#0000ff">div</span>></span> <span style="color:#0000ff"><<span style="color:#0000ff">input</span> <span style="color:#ff0000">name</span>=<span style="color:#a31515">"userId"</span> <span style="color:#ff0000">id</span>=<span style="color:#a31515">"userId"</span>  <span style="color:#ff0000">placeholder</span>=<span style="color:#a31515">"請輸入userid"</span>></span><span style="color:#0000ff"></<span style="color:#0000ff">div</span>></span>
    <span style="color:#0000ff"><<span style="color:#0000ff">div</span>></span> <span style="color:#0000ff"><<span style="color:#0000ff">input</span> <span style="color:#ff0000">name</span>=<span style="color:#a31515">"userName"</span> <span style="color:#ff0000">id</span>=<span style="color:#a31515">"userName"</span>   <span style="color:#ff0000">placeholder</span>=<span style="color:#a31515">"請輸入username"</span>></span><span style="color:#0000ff"></<span style="color:#0000ff">div</span>></span>
    <span style="color:#0000ff"><<span style="color:#0000ff">div</span>></span> <span style="color:#0000ff"><<span style="color:#0000ff">input</span>  <span style="color:#ff0000">type</span>=<span style="color:#a31515">"button"</span> <span style="color:#ff0000">value</span>=<span style="color:#a31515">"新增"</span> <span style="color:#ff0000">id</span>=<span style="color:#a31515">"btnSave"</span>/></span><span style="color:#0000ff"></<span style="color:#0000ff">div</span>></span>
<span style="color:#0000ff"></<span style="color:#0000ff">form</span>></span>
<span style="color:#0000ff"><<span style="color:#0000ff">script</span>></span>
    $(<span style="color:#0000ff">function</span> () {

        $(<span style="color:#a31515">"#btnSave"</span>).click(<span style="color:#0000ff">function</span> () {
            $.ajax({
                <span style="color:#ff0000">cache</span>: <span style="color:#a31515">true</span>,
                <span style="color:#ff0000">type</span>: <span style="color:#a31515">"POST"</span>,
                <span style="color:#ff0000">url</span>: <span style="color:#a31515">"/user/save"</span>,
                <span style="color:#ff0000">data</span>:$(<span style="color:#a31515">'#form1'</span>).serialize(),
                <span style="color:#ff0000">dataType</span>:<span style="color:#a31515">"json"</span>,
                <span style="color:#ff0000">async</span>: <span style="color:#a31515">false</span>,
                <span style="color:#ff0000">error</span>: <span style="color:#0000ff">function</span> (request) {
                    <span style="color:#0000ff">console</span>.log(<span style="color:#a31515">"Connection error"</span>);
                },
                <span style="color:#ff0000">success</span>: <span style="color:#0000ff">function</span> (data) {
                    <span style="color:#0000ff">if</span> (data.code == 0) {
                        <span style="color:#0000ff">console</span>.log(<span style="color:#a31515">"成功"</span>);
                    } <span style="color:#0000ff">else</span> {
                        <span style="color:#0000ff">console</span>.log(<span style="color:#a31515">"失敗"</span>);
                    }

                }
            });
        });

    });
<span style="color:#0000ff"></<span style="color:#0000ff">script</span>></span>
<span style="color:#0000ff"></<span style="color:#0000ff">body</span>></span>
<span style="color:#0000ff"></<span style="color:#0000ff">html</span>></span></code></span>

在瀏覽器中測試效果
右鍵 RestControllerApplication > Run 在瀏覽器輸入 http://localhost:8087/user/add

2.3.3 編輯用戶頁面 /user/edit

這部分代碼原理同 2.3.2 代碼原理 通過構件一個編輯頁面,點擊編輯頁面的【保存】提交到後端的 api 中。

本示例中創建了2個接口 1個文件

  • /user/edit 對應前端頁面
  • /user/update 對應前端頁面提交按鈕的接口
  • /templates/user/edit.html
<span style="color:#333333"><code> <span style="color:#008000">/**
     * GET 返回編輯頁面
     * <span style="color:#808080">@GetMapping</span>("/edit/{id}") = <span style="color:#808080">@RequestMapping</span>(method = RequestMethod.GET,value = "/edit/{id}")
     * <span style="color:#808080">@PathVariable</span>("id") 表示路由中的動態參數部分
     * <span style="color:#808080">@param</span>  id 表示要編輯的用戶id
     * <span style="color:#808080">@param</span> model 表示將要輸出到頁面的 Model 對象
     * <span style="color:#808080">@return</span> 返回到 user/edit頁面
     * */</span>
    <span style="color:#2b91af">@GetMapping</span>(<span style="color:#a31515">"/edit/{id}"</span>)
    <span style="color:#0000ff">public</span> String <span style="color:#a31515">edit</span>(@PathVariable(<span style="color:#a31515">"id"</span>) String id, Model model){
        UserDO user =<span style="color:#0000ff">new</span> UserDO();
        user.setUserId(3);
        user.setUserName(<span style="color:#a31515">"fishpro"</span>);
        model.addAttribute(<span style="color:#a31515">"user"</span>,user);
        <span style="color:#0000ff">return</span> <span style="color:#a31515">"user/edit"</span>;
    }

    <span style="color:#008000">/**
     * POST 修改用戶api
     * <span style="color:#808080">@RequestBody</span> 表示參數使用 json 對象傳輸
     * <span style="color:#808080">@return</span> 返回 map對象
     * */</span>
    <span style="color:#2b91af">@PostMapping</span>(<span style="color:#a31515">"/update"</span>)
    <span style="color:#2b91af">@ResponseBody</span>
    <span style="color:#0000ff">public</span> Object <span style="color:#a31515">update</span>(@RequestBody UserDO user){
        Map<String,Object> map=<span style="color:#0000ff">new</span> HashMap<>();
        <span style="color:#0000ff">if</span>(<span style="color:#0000ff">null</span>==user){

            map.put(<span style="color:#a31515">"status"</span>,3);
            map.put(<span style="color:#a31515">"message"</span>,<span style="color:#a31515">"沒有傳任何對象"</span>);
            <span style="color:#0000ff">return</span>  map;
        }
        <span style="color:#008000">//更新邏輯</span>
        map.put(<span style="color:#a31515">"status"</span>,0);
        <span style="color:#0000ff">return</span>  map;
    }</code></span>

edit.html

<span style="color:#333333"><code><span style="color:#2b91af"><!DOCTYPE html></span>
<span style="color:#0000ff"><<span style="color:#0000ff">html</span> <span style="color:#ff0000">lang</span>=<span style="color:#a31515">"en"</span>></span>
<span style="color:#0000ff"><<span style="color:#0000ff">head</span>></span>
    <span style="color:#0000ff"><<span style="color:#0000ff">meta</span> <span style="color:#ff0000">charset</span>=<span style="color:#a31515">"UTF-8"</span>></span>
    <span style="color:#0000ff"><<span style="color:#0000ff">title</span>></span>用戶編輯頁面<span style="color:#0000ff"></<span style="color:#0000ff">title</span>></span>
    <span style="color:#0000ff"><<span style="color:#0000ff">script</span> <span style="color:#ff0000">src</span>=<span style="color:#a31515">"https://cdn.bootcss.com/jquery/1.11.3/jquery.js"</span>></span><span style="color:#0000ff"></<span style="color:#0000ff">script</span>></span>
<span style="color:#0000ff"></<span style="color:#0000ff">head</span>></span>
<span style="color:#0000ff"><<span style="color:#0000ff">body</span>></span>
<span style="color:#0000ff"><<span style="color:#0000ff">form</span> <span style="color:#ff0000">id</span>=<span style="color:#a31515">"form1"</span>></span>
    <span style="color:#0000ff"><<span style="color:#0000ff">div</span>></span> <span style="color:#0000ff"><<span style="color:#0000ff">input</span> <span style="color:#ff0000">name</span>=<span style="color:#a31515">"userId"</span> <span style="color:#ff0000">id</span>=<span style="color:#a31515">"userId"</span>  <span style="color:#ff0000">placeholder</span>=<span style="color:#a31515">"請輸入userid"</span> <span style="color:#ff0000">th:value</span>=<span style="color:#a31515">${user.userId}</span>></span> <span style="color:#0000ff"></<span style="color:#0000ff">div</span>></span>
    <span style="color:#0000ff"><<span style="color:#0000ff">div</span>></span> <span style="color:#0000ff"><<span style="color:#0000ff">input</span> <span style="color:#ff0000">name</span>=<span style="color:#a31515">"userName"</span> <span style="color:#ff0000">id</span>=<span style="color:#a31515">"userName"</span>   <span style="color:#ff0000">placeholder</span>=<span style="color:#a31515">"請輸入username"</span> <span style="color:#ff0000">th:value</span>=<span style="color:#a31515">${user.userName}</span>></span><span style="color:#0000ff"></<span style="color:#0000ff">div</span>></span>
    <span style="color:#0000ff"><<span style="color:#0000ff">div</span>></span> <span style="color:#0000ff"><<span style="color:#0000ff">input</span>  <span style="color:#ff0000">type</span>=<span style="color:#a31515">"button"</span> <span style="color:#ff0000">value</span>=<span style="color:#a31515">"新增"</span> <span style="color:#ff0000">id</span>=<span style="color:#a31515">"btnSave"</span>/></span><span style="color:#0000ff"></<span style="color:#0000ff">div</span>></span>
<span style="color:#0000ff"></<span style="color:#0000ff">form</span>></span>
<span style="color:#0000ff"><<span style="color:#0000ff">script</span>></span>
    $(<span style="color:#0000ff">function</span> () {

        $(<span style="color:#a31515">"#btnSave"</span>).click(<span style="color:#0000ff">function</span> () {
            $.ajax({
                <span style="color:#ff0000">cache</span>: <span style="color:#a31515">true</span>,
                <span style="color:#ff0000">type</span>: <span style="color:#a31515">"POST"</span>,
                <span style="color:#ff0000">url</span>: <span style="color:#a31515">"/user/update"</span>,
                <span style="color:#ff0000">data</span>:$(<span style="color:#a31515">'#form1'</span>).serialize(),
                <span style="color:#ff0000">dataType</span>:<span style="color:#a31515">"json"</span>,
                <span style="color:#ff0000">async</span>: <span style="color:#a31515">false</span>,
                <span style="color:#ff0000">error</span>: <span style="color:#0000ff">function</span> (request) {
                    <span style="color:#0000ff">console</span>.log(<span style="color:#a31515">"Connection error"</span>);
                },
                <span style="color:#ff0000">success</span>: <span style="color:#0000ff">function</span> (data) {
                    <span style="color:#0000ff">if</span> (data.code == 0) {
                        <span style="color:#0000ff">console</span>.log(<span style="color:#a31515">"成功"</span>);
                    } <span style="color:#0000ff">else</span> {
                        <span style="color:#0000ff">console</span>.log(<span style="color:#a31515">"失敗"</span>);
                    }
                }
            });
        });

    });
<span style="color:#0000ff"></<span style="color:#0000ff">script</span>></span>
<span style="color:#0000ff"></<span style="color:#0000ff">body</span>></span>
<span style="color:#0000ff"></<span style="color:#0000ff">html</span>></span></code></span>

本項目源碼下載

2.3.3 刪除用戶 /user/delete

本項目源碼下載

<span style="color:#333333"><code><span style="color:#008000">/**
     * POST 修改用戶api 
     * <span style="color:#808080">@return</span> 返回 map對象
     * */</span>
    <span style="color:#2b91af">@PostMapping</span>(<span style="color:#a31515">"/delete/{id}"</span>)
    <span style="color:#2b91af">@ResponseBody</span>
    <span style="color:#0000ff">public</span> Object <span style="color:#a31515">delete</span>(@PathVariable(<span style="color:#a31515">"id"</span>) Integer id){
        List<UserDO> list= getData();
        UserDO userDO=<span style="color:#0000ff">null</span>;
        <span style="color:#0000ff">for</span> (UserDO user:list
                ) {
            <span style="color:#0000ff">if</span>(id.equals(user.getUserId().toString())){
                <span style="color:#008000">//刪除用戶</span>
                userDO=user;
                <span style="color:#0000ff">break</span>;
            }
        }

        Map<String,Object> map=<span style="color:#0000ff">new</span> HashMap<>();
        map.put(<span style="color:#a31515">"status"</span>,0);
        map.put(<span style="color:#a31515">"data"</span>,userDO);
        <span style="color:#0000ff">return</span>  map;
    }</code></span>

2.4 基於 @RestController 的示例代碼

本章節中是基於 2.3版本中的接口,其實是一樣的功能,詳細見下面的代碼,爲了完成代碼功能示例,我們新建了 UserRestController.java,不同的是 我們給類加了 @RestController 修飾符。

<span style="color:#333333"><code><span style="color:#2b91af">@RestController</span>
<span style="color:#2b91af">@RequestMapping</span>(<span style="color:#a31515">"user2"</span>)
<span style="color:#0000ff">public</span> <span style="color:#0000ff">class</span> <span style="color:#a31515">UserRestController</span> {
    <span style="color:#008000">//從 UserController 搬過來代碼即可</span></code></span>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章