Spring Boot 控制层
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot 控制层相关的知识,希望对你有一定的参考价值。
Spring Boot 控制层
1.无注解获取参数
@RequestMapping("/test1")
public Student test1(Integer id ,String name){
Student s = new Student();
s.setId(id);
s.setName(name);
return s;
}
2.HttpServletRequest的getParameter方法
@RequestMapping("/test2")
public Student test2( HttpServletRequest request ) {
Integer id = Integer.parseInt( request.getParameter("id") ); // 转换一下(没有判断空串或null)
String name = request.getParameter("name");
return new Student(id,name);
}
3.实体类封装
@RequestMapping("/test3")
public Student test3( Student s ) {
return s;
}
类的属性名和http参数要一致。
- @RequestParam
@RequestMapping("/test4")
public Student test4( @RequestParam(value="stu_id") Integer id,
@RequestParam(value="stu_name",required=true,defaultValue = "何浩") String name) {
Student s=new Student();
s.setId(id);
s.setName(name);
return s;
}
5.前端传递数组
@RequestMapping(value = "/test5")
public Integer[] test5( @RequestParam(value = "ids") Integer[ ] ids ) {
return ids;
}
@RequestMapping(value = "/test6")
public List<Integer> test6( @RequestParam(value = "ids") List<Integer> ids ) {
return ids;
}
6.使用 @PathVariable 获取参数
@RequestMapping("/test7/{id}/{name}")
public Student test5( @PathVariable(value = "id") Integer id,
@PathVariable(value = "name") String name) {
Student s=new Student();
s.setId(id);
s.setName(name);
return s;
}
//http://localhost:8080/test7/123/herio
7.使用 @RequestBody 获取参数
@PostMapping( value = "/test8")
public Map<String,Object> test6(@RequestBody Map<String,Object> map) {
return map;
}
8.前端传递对象数组
@PostMapping( value = "/test9")
public List<Student> test9(@RequestBody List<Student> list) {
Iterator it = list.iterator();
while (it.hasNext()){
Student s=(Student)it.next();
System.out.println(s.getId()+":"+s.getName());
}
return list;
}
9.获取格式化参数
@RequestMapping(value = "/test10")
public String test7( @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") Date date,
@NumberFormat(pattern = "#,###.#") BigDecimal price) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String s_date = sdf.format(date); //日期格式化
DecimalFormat df = new DecimalFormat("¥#,###.##"); //保留两位小数
String s_price=df.format(price); //数字格式化
return "今天("+s_date+")的价格是:"+s_price;
}
10.创建过滤器
@WebFilter("/*")
public class MyFilter implements Filter {
private List<String> IPList=new ArrayList<>();
@Override
public void init(FilterConfig filterConfig) throws ServletException { //过滤器初始化
IPList.add("127.0.0.1"); // 本机地址
IPList.add("0:0:0:0:0:0:0:1"); // IPv6 的本机地址,本机默认是这个地址
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
String ip = request.getRemoteAddr(); // 获得客户端 ip 地址
System.out.println(ip); //控制台上查看一下
if( IPList.contains(ip) ){
response.setContentType("text/html;charset=utf-8"); //设置响应的字符集(避免中文乱码)
response.getWriter().println("你已被列入黑名单!");
}
else{
chain.doFilter(request,response); //放行
}
}
}
启动类上加注解
@ServletComponentScan
11.创建拦截器
拦截器类MyInterceptor
public class MyInterceptor implements HandlerInterceptor {
//声明日志对象
private final Logger log = LoggerFactory.getLogger(this.getClass());
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String ip=request.getRemoteAddr(); //获得客户端 ip 地址
String path=request.getServletPath(); //获得客户端Servlet请求路径
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = new Date(); //获得当前系统日期时间
String ds = sdf.format(d); //格式化date对象
log.info(" 时间"+ds+" "+ip+" 访问了"+path); // 日志输出
return true; // 放行(关键点)
}
}
配置类中添加自己的拦截器
MyWebConfig类
@Configuration //配置类 不要掉了
public class MyWebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor( new MyInterceptor() ) //加载自定义的拦截器
.addPathPatterns("/**") //拦截的请求路径 /** 表示所有请求
.excludePathPatterns("/","/css/*","/images/*","/js/*"); //不拦截的请求,如首页、静态资源等
}
}
时间2021-05-21 11:34:21 0:0:0:0:0:0:0:1 访问了/hello
过滤器,拦截器执行周期
以上是关于Spring Boot 控制层的主要内容,如果未能解决你的问题,请参考以下文章