写点什么

SpringBoot2----Web 模块的基本注解,美的 java 面试题

  • 2021 年 11 月 10 日
  • 本文字数:2085 字

    阅读完需:约 7 分钟



@RestController,一般是使用在类上的,它表示的意思其实就是结合了 @Controller 和 @ResponseBody 两个注解


如果哪个类下的所有方法需要返回 json 数据格式的,就在哪个类上使用该注解,具有统一性;需要注意的是,使用了 @RestController 注解之后,其本质相当于在该类的所有方法上都统一使用了 @ResponseBody 注解,所以该类下的所有方法都会返回 json 数据格式,输出在页面上,而不会再返回视图。




@PathVariable




@PathVariable(“key”): 传入了对应的 key,只拿一个,不传,默认拿所有


@RestController


public class myController


{


@RequestMapping("/hello/{id}/name/{name}")//占位符


//获取路径上的占位符


public Map<String,Object> hello(@PathVariable("id")Integer id


//这里如果放置一个 map,spring 会将所用的路径参数放入 map 中


,@PathVariable("name")String name,@PathVariable Map<String,String> map)


{


Map<String,Object> m=new HashMap<>();


m.put("id",id);


m.put("name",name);


m.put("map",map);


return m;


}


}


这里 Map 的类型必须是 Map<String,String>






@RequestHeader





@RestController


public class myController


{


@RequestMapping("/hello")


public Map<String,Object> hello(


//带 key,拿一个,否则拿所有


@RequestHeader("user-agent") String header,


@RequestHeader Map<String,String> map


)


{


Map<String,Object> m=new HashMap<>();


m.put("header",header);


m.put("map",map);


return m;


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


}


}





@RequestParam




@RestController


public class myController


{


@RequestMapping("/hello")


public Map<String,Object> hello(@RequestParam("age")Integer age,


@RequestParam("hobby") List<String> list,


@RequestParam Map<String,String> map)


{


Map<String,Object> m=new HashMap<>();


m.put("age",age);


m.put("hobby",list);


m.put("map",map);


return m;


}


}





@CookieValue




获取指定 cookie 的值



@RestController


public class myController


{


@RequestMapping("/hello")


public Map<String,Object> hello(@CookieValue("Idea-60bbb23f")String value)


{


Map<String,Object> m=new HashMap<>();


m.put("value",value);


return m;


}


}



如果参数被声明为一个 cookie 类型,那么就可以获取到该 cookie 的所有信息:



@RestController


public class myController


{


@RequestMapping("/hello")


public Map<String,Object> hello(@CookieValue("Idea-60bbb23f") Cookie value)


{


Map<String,Object> m=new HashMap<>();


m.put("value",value);


return m;


}


}





@RequestBody




获取到请求体中的数据封装到指定的对象中,只有 Post 方式才有请求体



@RestController


public class myController


{


@RequestMapping("/hello")


public Map<String,Object> hello(@RequestBody String info)


{


Map<String,Object> m=new HashMap<>();


m.put("people",info);


return m;


}


}





@RequestAttribute




取出当前请求域中的值


@Controller


public class myController


{


@RequestMapping("/hello")


public String hello(HttpServletRequest request)


{


request.setAttribute("name","大忽悠");


request.setAttribute("age","18");


//这里没有模板引擎的话,无法完成页面跳转


return "forward:success";//转发到 /success 请求


}


@ResponseBody


@RequestMapping("/success")


public Map<String,Object> show(


@RequestAttribute("name")String name,


//这里是转发,因此是一次请求,所以 request 对象是同一个


HttpServletRequest request)


{


String rn= (String) request.getAttribute("age");


Map<String,Object> map=new HashMap<>();


map.put("name",name);


map.put("age",rn);


return map;


}


}




注意: 如果不引入模板引擎,那么就无法完成下面页面渲染,跳转到指定页面等功能



@MatrixVariable—矩阵变量






小应用: cookie 禁用后,如何获取 Jsessionid ?

session.get(a)<-----服务器按照 jsessionid 得到 session 对象<-----cookie 中保存了 session 对象的唯一标识 id<-----每次发请求携带该 cookie


  • [ ] url 重写: /abc;jsessionid=xxxx 把 cookie 中保存的 jsessionid 的值通过矩阵变量的方式传递,和请求参数区分开来



手动开启矩阵变量的功能


我们可以使用 @Configuration + WebMvcConfigurer 自定义配置,覆盖默认配置



对应配置类实现 WebMvcConfigurer 接口完成对 springmvc 默认配置的修改

**WebMvcConfigurer 是一个接口。里面的方法都是 default 的方法,可以有选择的实现。方法的返回值都是 webmvc 需要配置的 Bean。


所以可以实现这个接口,配合 @Configuration 注解自定义 mvc 组件。**


@Configuration//表明这是一个配置类


public class WebConfig implements WebMvcConfigurer


{


@Override


public void configurePathMatch(PathMatchConfigurer configurer) {


UrlPathHelper urlPathHelper=new UrlPathHelper();


//不移除分号后面的内容,矩阵变量功能就可以生效


urlPathHelper.setRemoveSemicolonContent(false);


configurer.setUrlPathHelper(urlPathHelper);


}


}



直接将对应组件注入容器中

@Configuration//表明这是一个配置类


public class WebConfig


{

评论

发布
暂无评论
SpringBoot2----Web模块的基本注解,美的java面试题