SpringBoot2----Web 模块的基本注解,美的 java 面试题
@RestController,一般是使用在类上的,它表示的意思其实就是结合了 @Controller 和 @ResponseBody 两个注解
如果哪个类下的所有方法需要返回 json 数据格式的,就在哪个类上使用该注解,具有统一性;需要注意的是,使用了 @RestController 注解之后,其本质相当于在该类的所有方法上都统一使用了 @ResponseBody 注解,所以该类下的所有方法都会返回 json 数据格式,输出在页面上,而不会再返回视图。
@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>
@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;
}
}
@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;
}
}
获取指定 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;
}
}
获取到请求体中的数据封装到指定的对象中,只有 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;
}
}
取出当前请求域中的值
@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;
}
}
注意: 如果不引入模板引擎,那么就无法完成下面页面渲染,跳转到指定页面等功能
小应用: 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
{
评论