Spring MVC 傳參類型

參數

@RequestParam

主要來是於URL,例如本篇博客的地址 https://editor.csdn.net/md?articleId=104571682,
articleId=104571682 就是 這種參數。

@RequestBody

主要來自表單信息,通過POST的方式把表單的信息傳到後臺。

@RequestHeader

求請的表單頭。一般用來放瀏覽器信息,cookies等信息。

代碼實例

下面通過一個實例來說明Spring MVC 參數的設置,網絡傳輸抓包,以及前端的調用。

服務層代碼


import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;


import java.sql.SQLException;
import java.util.List;

@CrossOrigin
@RestController
@Api(value = "Test", description = "Test")
public class Test {
    
    @ApiOperation(value = "參數測試")
    @RequestMapping(path = "test/paramTest", method = RequestMethod.POST)
    public String paramTest(
            @RequestParam String OperateType ,
            @RequestBody InputClass inp,
            @RequestHeader String  token
    ) {
        return "Richy's Test";
    }
}

實體層

package rui.tools.service.Test;

public class InputClass {
   private   String attr1;
   private  String attr2;

    public String getAttr1() {
        return attr1;
    }

    public void setAttr1(String attr1) {
        this.attr1 = attr1;
    }

    public String getAttr2() {
        return attr2;
    }

    public void setAttr2(String attr2) {
        this.attr2 = attr2;
    }
}

前端測試

      function f_c() {
            var url = "http://localhost:8080/test/paramTest?OperateType=add";
            var opt = {
                attr1: "a",
                attr2: "b",
            };
            $.ajax({
                type: "POST",
                url: url,
                headers: {
                  token:'key'
                },
                data: JSON.stringify(opt),
                contentType: "application/json",
                success: function (data) {
                    alert(data)
                },
                error: function (data) { alert("error"); }
            });
        }

瀏覽器網絡分析

如下圖所示,
@RequestParam對應的是URL的參數。
@RequestBody對應的 是Form 的值
@RequestHeader 對應是 Head的參數
在這裏插入圖片描述

補充

因爲是前後端分離,需要注意跨域的處理。
本例子使用後臺設置header允許跨域訪問。代碼如下。

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class WebFillter implements Filter {
    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;
        String originHeader = request.getHeader("Origin");
        response.setHeader("Access-Control-Allow-Origin", originHeader);
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "0");
        response.setHeader("Access-Control-Allow-Headers", "Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("XDomainRequestAllowed", "1");
        response.setHeader("XDomainRequestAllowed", "1");
        chain.doFilter(request, response);
    }

    public void init(FilterConfig arg0) throws ServletException {

    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章