码迷,mamicode.com
首页 > 编程语言 > 详细

Spring Boot 学习(一)@RequestAttribute @MatrixVariable @UrlPathHelper

时间:2021-06-29 16:08:05      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:servlet   写法   定义   private   turn   rem   configure   注意   over   


@GetMapping("/send") public String getmessage(HttpServletRequest request) { request.setAttribute("msg","跳转"); //设置参数 request.setAttribute("code",123); return "forward:/success"; //转发到success请求 }
   @ResponseBody    //注意要加上这个注解,否则会出现500报错
    @GetMapping("/success")
    public Map success(@RequestAttribute("msg") String msg,     //通过RequestAttribute获取请求域中的所有值
                       @RequestAttribute("code") Integer code,
                        HttpServletRequest request) {    //获取到send的数据msg
        Object msg1 = request.getAttribute("msg");
        Map<String,Object> map = new HashMap<>();
        map.put("reqMethod_msg",msg1);  //获取原生servlet中的request的值
        map.put("annotation_msg",msg);  //获取基于注解额request的值
        return map;
    }

值得注意的是如果只声明了Controller那么要在需要显示数据在浏览器的时候需要加上注解@ResponseBody

 

package com.sp.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestAttribute;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

@Controller   //这里只声明了Controller注解
public class RequestController {

    @GetMapping("/send")
    public String getmessage(HttpServletRequest request) {
        request.setAttribute("msg","跳转");
        request.setAttribute("code",123);

        return "forward:/success";  //转发到success请求
    }
    @ResponseBody     //因此在显示页面数据需要加上注解ResponseBody
    @GetMapping("/success")
    public Map success(@RequestAttribute("msg") String msg,     //通过RequestAttribute获取请求域中的所有值
                       @RequestAttribute("code") Integer code,
                        HttpServletRequest request) {    //获取到send的数据msg
        Object msg1 = request.getAttribute("msg");
        Map<String,Object> map = new HashMap<>();
        map.put("reqMethod_msg",msg1);  //获取原生servlet中的request的值
        map.put("annotation_msg",msg);  //获取基于注解额request的值
        return map;
    }
}

技术图片

 

 

 

注意在@RestController   包含了@Controller   和     @ResponseBody  这两个注解,所以在访问请求的时候可以显示数据ResponseBody  

 

@MatrixVariable   矩阵变量

Spring Boot 禁用了矩阵变量,需要手动开启

有两种写法在@Configuration(proxyBeanMethods = false)注解下

package com.sp.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.util.UrlPathHelper;

@Configuration(proxyBeanMethods = false)
public class WebConfig /*implements WebMvcConfigurer */{
//      写法一
//    @Override
//    public void configurePathMatch(PathMatchConfigurer configurer) {  //对configurePathMatch进行重写
//        UrlPathHelper urlPathHelper = new UrlPathHelper();
//        urlPathHelper.setRemoveSemicolonContent(false);  //将RemoveSemicolonContent设置为false,此时矩阵变量才能生效
//        configurer.setUrlPathHelper(urlPathHelper);
//    }
//    写法二
      @Bean   //自己定义一个组件
    public WebMvcConfigurer webMvcConfigurer() {
          return new WebMvcConfigurer() {
              public void configurePathMatch(PathMatchConfigurer configurer) {
                  UrlPathHelper urlPathHelper = new UrlPathHelper();
                  urlPathHelper.setRemoveSemicolonContent(false);
                configurer.setUrlPathHelper(urlPathHelper);
              }
          };
      }

}
技术图片

 

在UrlPathHelper中默认情况下是移除分号内容

//    low=34;brand=byd,audi,yd
// SpringBoot默认是禁用了矩阵变量的功能
// 手动开启:对于路径的处理,UrlPathHelper进行解析
// UrlPathHelper -> private boolean removeSemicolonContent = true; (移除分号内的内容)
// 在@Configuration中重写configurePathMatch方法,将removeSemicolonContent改为false
注意:之后在controller中,注意这里的矩阵变量要绑定在路径变量中所以加上{path},否则出现404
@GetMapping("/cars/{path}")           //矩阵变量必须有url路径变量才能被解析,否则404
public Map carsell(@MatrixVariable("low") Integer low, //不是请求参数,而是矩阵变量,需要加上注解,矩阵变量要绑定在路径变量中 @MatrixVariable("brand") List<String> brand, @PathVariable("path") String path) { //需要加上路径访问变量的注解 Map<String,Object> map = new HashMap<>(); map.put("low",low); map.put("brand",brand); map.put("path",path); return map; }
<a href="/cars/sell;low=34;brand=byd,audi,yd">MatrixVariable(矩阵变量)</a>

技术图片

 

 

 

 

/boss/1;age=34/2;age=22   boss1 路径下的age  2路径下的age,
需要注意的是,传递的参数名都一样的时候,需要在矩阵变量的注解中加上pathVar来加以区分,否则会出现404
@GetMapping("/boss/{bossId}/{empId}")
    public Map bossmessage(@MatrixVariable(value = "age",pathVar = "bossId") Integer bossage,  //当传入的参数名一样时,需要哟波pathVar进行区分
                           @MatrixVariable(value = "age",pathVar = "empId") Integer empage) {
        Map<String,Object> map = new HashMap<>();
        map.put("bossage",bossage);
        map.put("empage",empage);
        return map;
    }
<a href="/boss/1;age=34/2;age=22">MatrixVariable(矩阵变量2)</a>

技术图片

 

 

 


 

@UrlPathHelper

 

Spring Boot 学习(一)@RequestAttribute @MatrixVariable @UrlPathHelper

标签:servlet   写法   定义   private   turn   rem   configure   注意   over   

原文地址:https://www.cnblogs.com/YuyuFishSmile/p/14949484.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!