1. 程式人生 > >SpringBoot之Controller基礎入門使用

SpringBoot之Controller基礎入門使用

本節主要了解如下註解,基本和之前的spring mvc註解的使用一樣,我們再使用spring boot稍微複習一下

@Controller 處理http請求@RestController Spring4之後新加的註解,原來返回json需要@ResponseBody配合@Controller@RequestMapping 配置url對映@PathVariable 獲取url中的資料@RequestParam 獲取請求引數中的值

1. 前言

專案前後臺互動的話 無非兩種方式

  • 一種普通整體頁面提交,比如form提交;

  • 還有一種區域性重新整理,或者叫做非同步重新整理,ajax提交;

@Controller就是整體頁面重新整理提交的處理註解

@RestController就是ajax提交,一般返回json格式,相當於我們經常使用的@ResponseBody配合@Controller組合

2 .編碼

這裡我們分別來演示上面兩種互動。請求後臺,必須返回一個檢視,以前我們一般用Jsp,但是SpringBoot不推薦我們使用jsp,主要是強調前後臺分離;官方推薦的是這幾種模版檢視引擎,我一般推薦Freemarker和Velocity;

新增freemarker支援,在pom.xml檔案新增對應的依賴


<dependency>
    <
groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>

然後我們在Controller包下新建一個新的Controller類 HelloWorldFreemakerController

package com.jd.controller;

import org.springframework.stereotype.Controller;
import
org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView; /** * Created by Administrator on 2018/6/24. */ @Controller @RequestMapping("/freemarker") public class HelloWorldFreemakerController {    /**     * 設定資料,返回到freemarker檢視     * @return     */    @RequestMapping("/say")    public ModelAndView say(){        ModelAndView mav=new ModelAndView();        mav.addObject("message", "SpringBoot 大爺你好!");        mav.setViewName("helloWorld");        return mav;   } }

對應的,我們在templates下新建一個helloWorld.ftl模版檔案(Freemaker的字尾問ftl)

helloWorld.ftl模版檔案內容:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
show:${message}
</body>
</html>

我們測試下,啟動SpringbootDemoApplication

然後瀏覽器輸入:http://localhost:8888/HelloWorld/freemarker/say

頁面顯示結果:

我們再演示下@RestController,ajax方式

我們新建一個HelloWorldAjaxController類

package com.jd.controller;
 
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
 
/**
 * 返回ajax json格式
 * @author user
 *
 */
@RestController
@RequestMapping("/ajax")
public class HelloWorldAjaxController {
 
    @RequestMapping("/hello")
    public String say(){
        return "{'message1': 'SpringBoot你大爺','message2','SpringBoot你大爺2'}";
    }
}

返回json串

這裡我們用的是jquery,隨便找個jquery.js進行引用,這個jquery ajax的使用一定要熟練我這裡就不說了

index.html程式碼,一個ajax請求


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="jQuery.js"></script> <!--自己找一個jquery,線上的也可以-->
<script type="text/javascript">
    function show(){
        $.post("ajax/hello",{},
                function(result){
                    alert(result);
                }
            );
    }
     
</script>
</head>
<body>
<button onclick="show()">你大爺</button>
</body>
</html>

啟動HelloWorldApplication類

頁面先請求index.html

瀏覽器輸入:http://localhost:8888/HelloWorld/

當然這裡的json比較簡單,所以我直接返回; 實際專案Json格式複雜,要藉助於一些json框架,比如Json-lib,gson等;

當然還有一些比如

@PathVariable 獲取url中的資料,獲取路徑中的值

@RequestParam 獲取請求引數中的值

簡單的寫個例子,瞭解一下即可

package com.jd.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/blog")
public class BlogController {

    /**
     * @PathVariable 配合 @RequestMapping使用可以獲取到路徑中的引數
     * http://localhost:8888/HelloWorld/blog/21  則 id=21
     * @param id
     * @return
     */
    @RequestMapping("/{id}")
    public ModelAndView show(@PathVariable("id") Integer id){
        ModelAndView mav=new ModelAndView();
        mav.addObject("id", id);
        mav.setViewName("blog");
        return mav;
    }

    /**
     * RequestParam 獲取提交的引數
     * 
     * http://localhost:8888/HelloWorld/blog/query?q=123456 則q = 123456
     * @param q
     * @return
     */
    @RequestMapping("/query")
    public ModelAndView query(@RequestParam(value="q",required=false)String q){
        ModelAndView mav=new ModelAndView();
        mav.addObject("q", q);
        mav.setViewName("query");
        return mav;
    }
}