1. 程式人生 > >SpringMVC之控制器接收各類請求引數

SpringMVC之控制器接收各類請求引數

1.接收普通請求引數
傳遞過來的引數名稱和HTTP的一致時,無須任何註解直接可以獲取引數資訊;如果不一致,無法獲取。(引數允許為空)

(1)接收的引數為某一欄位,這裡的例子是傳送ajax請求,data中的id既是傳送請求的引數。如果是表單中的某一個欄位,則要name屬性的值跟引數名一樣才能接收引數資訊。

$.ajax({
      type: 'get',
       url: '<%=basePath%>/account/deleteAccountById',
       data: {id: data.id},
       success: function (result) {
             if
(result.code == 0) { window.location.reload();//重新整理當前頁面 }else { layer.msg('eles:刪除失敗!' + result.msg, {icon: 2, time: 500}); } } }) @RequestMapping("deleteAccountById") @ResponseBody public Map<String, Object> deleteAccountById(Integer
id){ accountService.deleteAccountById(id); Map<String,Object> map = new HashMap<>(); map.put("code","0"); map.put("count","1000"); map.put("msg",""); return map; }

(2)接受的引數為pojo物件,跟欄位一樣,如果是表單,則表單的name屬性要與pojo物件中的每一個屬性值相同。

//前端程式碼
$.ajax({
     type
: 'POST', url: '<%=basePath%>/account/addAccount', data: data.field, dataType:'json', async: true, success: function (result) { console.log(result.code); if (result.code == 0) { layer.msg('success:儲存成功', {icon: 1, time: 500}); setTimeout(function () { parent.location.href = "<%=basePath%>/account/toAccount"; }, 1000); } else { console.alert(result.code); layer.msg('eles:儲存失敗!' + result.msg, {icon: 2, time: 500}); layer.close(index); } } }); //控制器程式碼 @RequestMapping("addAccount") @ResponseBody public Map<String,Object> addAccount(Account account){ Integer role_id = roleService.findIdByName(account.getRole_name()); account.setRole_id(role_id); accountService.addAccount(account); Map<String,Object> map = new HashMap<>(); map.put("code","0"); map.put("msg",""); return map; }

2.使用@RequestParam註解獲取引數
使用場景:在name屬性值與欄位值或者pojo的屬性值不同時,獲取引數;或者是想獲取某個引數的值,但沒有對應的欄位或者pojo屬性與其對應。預設引數不能為空

//前端程式碼
layui.form.on('submit(save)', function (data) {
        var ids = $("#userList").val();
        $.ajax({
            type: 'POST',
            url: '<%=basePath%>/assess/addAssess?ids='+ids,
            data: data.field,
            dataType:'json',
            async: true,
            success: function (result) {
                if (result.code == 0) {
                    layer.msg('success:儲存成功', {icon: 1, time: 500});
                    setTimeout(function () {
                        parent.location.href = "<%=basePath%>/assess/activityInfo";
                    }, 1000);
                } else {
                    console.alert(result.code);
                    layer.msg('eles:儲存失敗!' + result.msg, {icon: 2, time: 500});
                    layer.close(index);
                }
            },
            error: function (result, type) {
                layer.msg('error:儲存失敗!'+result+":"+type, {icon: 2, time: 500});
            }
        });
        console.log(data.field)
        return false;
    })
    })

//後臺程式碼,這裡的ids是獲取的一系列的資訊id集合,所以需要@RequestParam獲取該引數
 @RequestMapping("addAssess")
    @Transactional
    @ResponseBody
    public Map<String,Object> addAssess(@RequestParam("ids")String ids,Assess assess){

3.使用URL傳遞引數
該方法符合RESTFul風格,通過get請求直接傳送引數值,如/params/getRole/1,其中1就是引數,該方法就是獲取1的值。
{id}代表處理器需要接受一個由URL組成的引數,且引數名稱為id,那麼在方法中的@PathVariable(“id”)表示將獲取這個在@RequestMapping中定義名稱為id的引數。

@RequestMappping("/getRole/{id}")
//註解@PathVariable表示從URL的請求地址中獲取引數
public String pathVariable(@PathVariable("id")int id){
     .......
}

4.傳遞JSON引數
針對:對於引數的傳遞還需要更多的引數時,如分頁查詢。
前端程式碼傳遞時:
(1)注意傳送的請求中contentType需要指定為”application/json”,data:JSON.stringify(data)//將json轉化成欄位串傳遞
(2)在後臺程式碼中,需要使用@ResponseBody註解分頁的pojo,如果要返回ajax請求的資料,也需要使用@ResponseBody在方法的前面。

5.接收列表資料和表單序列化
接收列表資料:通過將json資料轉換成字串進行傳遞,使用new MappingJackson2JsonView()返回json格式資料(只對MoldeAndVIew返回形式)
表單序列化:在前端程式碼中,使用$(“form”).serialize();

6.重定向
場景:在新增一個角色資訊後,需要將新增的資料資訊展示給請求者

 @RequestMapping("/addRole")
    //Model為重定向資料模型,spring MVC會自動初始化
    public String addRole(Model model,String roleName){
        Role role = new Role();
        role.setName(roleName);
        //插入角色資訊後,會回填角色編號
        roleServcice.addRole(role);
        model.addAttribute("roleName",roleName);
        return "redirect:../assess/assess_info";
    }

model是一種資料模型,然後通過返回字串實現重定向功能。spring mvc有一個約定,當返回的字串有redirect時,就認定該請求不是轉向檢視解析器,而是重定向。當然也可以通過modelAndView的addObject新增,然後進行重定向。

但對於傳遞的引數一般不只是一個兩個,而是一個pojo類,可以通過以下方式:

@RequestMapping("/addRole")
    public ModelAndView addRole(Role role){
        ModelAndView mv = new ModelAndView();
        mv.addObject("role",role);
        mv.setViewName("redirect:../assess/assess_info");
    }

但是這個方法不能實現URL重定向的資料傳遞。因為HTTP的重定向傳遞引數是以字串的形式傳遞的。這個時候需要通過另一個數據模型RedirectAttribute.

@RequestMapping("/addRole")
    //RedirectAttributes物件Spring MVC會自動初始化它
    public String addRole(RedirectAttributes rs,Role role){
        roleService.addRole(role);
        rs.addFlashAttribute("role",role);
        return "redirect:../assess/assess_info";
    }

該傳遞方法的原理是:使用addFlashAttribute方法後,Spring MVC會將資料儲存到session中,重定向後就會將其清除,這樣就可以實現物件資料的重定向。

7.儲存並獲取屬性引數
在開發過程中,有時候我們會暫時將資料儲存到HTTP的request物件或者session物件中,或者是從中獲取資料。在spring mvc中,通過三個註解獲取該資料:(1)@RequestAttribute:獲取HTTP的請求(request)物件屬性值,用來傳遞給控制器的引數。(該註解在引數中使用)

public String reqAttr(@RequestAttribute("id")int id)

(2)@SessionAttribute:獲取HTTP的請求(session)物件屬性值,用來傳遞給控制器的引數。引數預設不能為空,可以通過required=false修改。

public String reqAttr(@SessionAttribute("id")int id)

(3)SessionAttributes:書上解釋:給它配置一個字串陣列,這個陣列對應的是資料模型對應的鍵值對,然後將這些鍵值對儲存到session中。通過傳遞的引數,會根據名稱和型別儲存id和角色資訊。

//可以配置資料模型的名稱和型別,兩者取或關係
@SessionAttribute(name={"id"},types={Role.class})

[email protected]和@ReuquestHeader
就是從cookie和HTTP的header中獲取對應的請求資訊。在方法的引數中使用。預設引數不能為空。

public String HeaderAndCookie(
                @ReuqestHeader(value="User-Agent,required=false,defaultValue="attribute")String userAgent,
                @CookieValue(value="JSESSIONID",required=false,defaultValue="MyJsessionId")String jsessionId,

相關推薦

SpringMVC控制器接收各類請求引數

1.接收普通請求引數 傳遞過來的引數名稱和HTTP的一致時,無須任何註解直接可以獲取引數資訊;如果不一致,無法獲取。(引數允許為空) (1)接收的引數為某一欄位,這裡的例子是傳送ajax請求,data中的id既是傳送請求的引數。如果是表單中的某一個欄

Springmvc——Controller接受各類請求引數

url傳送過來的請求攜帶的引數多種多樣,SpringMVC提供了諸多註解來解析引數。期目的就是 把控制器從複雜的Servlet API中剝離開來,解耦合,這樣就可以在非web容器環境中重用控制器,也方便測試。 請求引數大致可分為5種: 普通請求引數 需要@RequestP

SpringMVC接收JSON請求引數時指定引數對映到Bean中的某個成員屬性的方法

在使用SpringMVC的時候如果前臺傳過來的請求引數與Bean成員變數都採用駝峰式規範(使用@RequestBody接收的JSON請求也一樣),則SpringMVC會自動將請求引數對映到Bean成員變數。 但如果前臺傳過來或者呼叫服務api的json使用下劃線的變數命名方

SpringMVC後臺接收引數與前臺傳遞資料

1、接收請求引數 1. 使用HttpServletRequest獲取 Java程式碼 收藏程式碼 @RequestMapping(“/login.do”) public String login(HttpServletRequest reque

Spring MVC(三)控制器獲取頁面請求引數以及將控制器資料傳遞給頁面和實現重定向的方式

首先做好環境配置 在mvc.xml裡進行配置   1.開啟元件掃描   2.開啟基於mvc的標註   3.配置試圖處理器 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www

SpringMVC原始碼--控制器Handler處理請求過程

      DispatcherServlet類的doDispatch()方法中,真正去處理請求的關鍵步驟是:            HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());  

後臺接收Json請求引數相容陣列和單個物件

蘇格團隊 作者:宇你平安 背景 場景一:前後端對接介面,增刪改查,一開始請求的引數,基本是單條資料,json格式基本是{"key":"value"},產品後續擴充套件,傳參變成批量操作json格式為[xxx,xxx]或者[{"key":"value"}],此時後端修改

SpringMVC從URL上獲取引數

1.例子URL http://127.0.0.1/item/xxx {xxx}叫做佔位符,請求的URL可以是“item /1”或“item/2”  2.從URL上獲取引數 如果@RequestMapping中表示為"item/{id}",id和形參名稱一致,@

nginx 配置接收 post 請求引數

nginx.conf http{ ...省略... log_format post_tracking '$remote_addr - $remote_user [$time_loc

SpringMVC @RequestBody 接收Json陣列物件

前臺使用ajax技術,傳遞json字串到後臺;後臺使用Spring MVC註解@RequestBody 接受前臺傳遞的json字串,並返回新的json字串到前臺;前臺接受後臺傳遞過來的json資料,並顯示。 2. 前臺介面和js <%@ page l

.Net Core WebApi控制器接收原始請求正文內容

雖然傳輸json資料是最常用的,但有時候我們需要支援普通的文字或者二進位制資訊。我們將Content-Type改為text/plainUser-Agent: Fiddler Host: localhost:5000 Content-Type:text/plain Content-Length: 16 請求b

使用 aop攔截 springMVC的controller並獲取請求引數及返回結果

有人說使用aop攔截不到springMVC的controller,一般出現此種情況大多是由於配置錯誤造成,不廢話直接進入主題: 1、applicationContext.xml 配置掃描 除@controller外的bean <context:component

使用springmvc利用baseController自動收集請求引數

public abstract class BaseController中新增以下方法 /** * 獲取請求屬性封裝為Map型別 * @param request * @return */ protected HashMap<String, Obje

SpringMVC接收請求引數和頁面傳參

1.Spring接收請求引數 1>.使用HttpServletRequest獲取 @RequestMapping("/login.do") public String login(HttpServletRequest request){ String name = request.g

springmvc中@requestbody註解接收請求引數

一、POST請求的四種常用方式   1、application/x-www-form-urlencoded     瀏覽器原生的表單,值為urlencoded之後的  key1=value1&key2=value2......   2、multipart/form-data     

SpringMVC控制器接收不了PUT提交的引數的解決方案

這次改造了下框架,把控制器的API全部REST化,不做不知道,SpringMVC的REST有各種坑讓你去跳,順利繞過它們花了我不少時間,這次來提下SpringMVC的PUT提交引數為null的情況。 照常先貼出我的控制器程式碼,沒什麼特別的,就是打印出接受到的前

Struts2action接收請求引數

1. 採用基本型別接受請求引數(get/post) action: public class GetparamAction extends ActionSupport {private int age;private String name;public String ge

SpringMVCGET請求引數中文亂碼

只怪自己專案做太少,遇到這些問題糾結太久,浪費時間太多. 在此記錄, WEB.XML檔案中的編碼過濾器設定是針對POST請求的,tomacat對GET和POST請求處理方式是不同的,要處理針對GET請求的編碼問題,則需要改tomcat,conf目錄下的server.x

Springmvc controller接收請求引數型別

轉載地址:http://18810098265.iteye.com/blog/2380269 第一種情況:資料是基本型別或者String1, 直接用表單提交,引數名稱相同即可; Controller引數定義為陣列型別即可.不要定義為List<String> 

axios傳送post請求springMVC接收不到引數

axios傳送post請求時,出現了引數後臺接收不到的情況,分析了下請求,發現是請求頭content-type不對,是application/json,正常應該是application/x-www-form-urlencoded。 解決方法有以下三種: 1、