一、相关注解说明SpringBoot的Controller中经常用到@Controller、@RestController、@RequestMapping、@RequestParam、@PathVariable、@RequestBody等注解。下面是这些注解的简单使用。1、@Controller用于定义控制器类。在spring项目中,控制器负责将用户发送的URL请求转发给相应的服务接口(服务层)。一般这个注解在类中,通常方法需要配合注解@RequestMapping。@Controller@RequestMapping("/demo")publicclassHttpController{@RequestMapping(value="/hello")publicStringsayHello(){System.out.println("helloworld!");返回“你好”;}}2.@RestController用于定义控制器类。注解是@Controller和@ResponseBody的集合,表示这是一个controllerbean,函数的返回值直接填充在HTTP响应体中。它是一个REST风格的控制器。@RestController@RequestMapping("/demo")公共类RestHttpController{@RequestMapping(value="/rest")publicObjectrest(){MapresultMap=newHashMap<>(8);resultMap.put("msg","我正在休息控制器测试");resultMap.put("代码","10000");返回结果图;}}Requestreturn:{"msg":"iamrestcontrollertest","code":"10000"}3.@RequestMapping作用于类或方法,用于映射URL路径,映射http请求地址到控制器类的处理方法。参数说明:value:定义处理方式的请求的URL地址。(Key)method:定义处理方法的http方法类型,如GET、POST等。(Key)params:定义请求的URL中必须包含的参数。或者不包含某些参数。(理解)headers:定义请求中的RequestHeaders必须包含的参数。或者不包含某些参数。(理解)派生注解:GetMapping:等价于@RequestMapping(value="hello",method=RequestMethod.GET),接收Get请求方法的RequestMapping。PostMapping:相当于@RequestMapping(value="hello",method=RequestMethod.POST),接收POST请求方法的RequestMapping。DeleteMapping:相当于@RequestMapping(value=“hello”,method=RequestMethod.DELETE),接收DELETE请求方法的RequestMapping。PutMapping:相当于@RequestMapping(value="hello",method=RequestMethod.PUT),接收PUT请求方法的RequestMapping。PatchMapping:相当于@RequestMapping(value="hello",method=RequestMethod.PATCH),接收PATCH请求方法的RequestMapping。@RestController@RequestMapping("/demo")publicclassRestHttpController{@RequestMapping(value="/rest")publicObjectrest(){MapresultMap=newHashMap<>(8);resultMap.put("msg","我正在休息控制器测试");resultMap.put("代码","10000");返回结果图;}@PostMapping("/post")publicObjectpost(){MapresultMap=newHashMap<>(8);resultMap.put("msg","我正在做映射测试");resultMap.put("代码","10000");返回结果图;}@GetMapping("/get")publicObjectget(){MapresultMap=newHashMap<>(8);resultMap.put("msg","我正在获取映射测试");resultMap.put("代码","10000");返回结果图;}@PutMapping("/put")publicObjectput(){MapresultMap=newHashMap<>(8);resultMap.put("msg","我把mapp测试");resultMap.put("code","10000");returnresultMap;}@DeleteMapping("/delete")publicObjectdelete(){MapresultMap=newHashMap<>(8);resultMap.put("msg","我正在删除映射测试");resultMap.put("code","10000");returnresultMap;}@PatchMapping("/patch")publicObjectpatch(){MapresultMap=newHashMap<>(8);resultMap.put("msg","我是补丁映射测试");resultMap.put("code","10000");returnresultMap;}}4.@RequestParam作用于方法,@RequestParam注解与@RequestMapping配合使用,将请求参数与处理方法的参数进行绑定。@GetMapping("/test1")publicObjectrequestParamTest(@RequestParam("data")Stringdata){MapresultMap=newHashMap<>(8);resultMap.put("data","传入的参数为:"+data);resultMap.put("代码","10000");返回结果图;}curlhttp://127.0.0.1:8080/demo/test1?data=test_data{"code":"10000","data":"入参为:test_data"}5.@RequestBody作用于形参list,用于将前台发送的固定格式数据[xml格式或json等]封装成对应的JavaBean对象,封装时使用的对象是系统默认配置的HttpMessageConverter,用于解析封装形式参数。@PostMapping("/test2")publicObjectrequestBodyTest(@RequestBodyUserDTOuser){MapresultMap=newHashMap<>(8);resultMap.put("data","传入的参数为:"+user);resultMap.put("代码","10000");返回结果图;}curlhttp://127.0.0.1:8080/demo/test2-XPOST-d'{"username":"Trazen","address":"anhui"}'--header"Content-Type:application/json"{"code":"10000","data":"传入参数为:UserDTO{id='ca56c077-33e7-4b9c-8ca6-72b01d931996'username='Trazen',address='anhui'}"}6,@PathVariable与RequestMapping配合使用,负责解析url请求中的占位参数({XXX})的值,绑定到方法中的形参上。@GetMapping("/test3/{data}")publicObjectpathVariableTest(@PathVariable("data")Stringdata){MapresultMap=newHashMap<>(8);resultMap.put("data","传入参数为:"+data);resultMap.put("代码","10000");returnresultMap;}curlhttp://127.0.0.1:8080/demo/test3/test_data{"code":"10000","data":"入参为:test_data"}7.@ResponseBody用在控制层(controller)的方法,方法的返回值以特定格式写入响应的body区。然后将数据返回给客户端。当方法上没有写ResponseBody时,底层会把方法的返回值封装成一个ModelAndView对象。如果返回值为字符串,则直接将字符串写入客户端;如果是对象,将对象转成json字符串,然后写入客户端。2、HTTP接口请求实战以GET请求为例,POST、PUT、DELETE类似。1.获取PathVariable中的字段/***通过@PathVariable解析url请求中占位参数({XXX})的值,绑定到方法的形参上*@paramdeptId*@paramuserId*@return*/@GetMapping("/{deptId}/{userId}")publicObjectqueryUser(@PathVariable("deptId")StringdeptId,@PathVariable("userId")StringuserId){MapresultMap=new哈希图<>(8);resultMap.put("deptId",deptId);resultMap.put("userId",userId);返回结果图;}请求测试结果:2.获取params中的参数/***获取params中的参数*@parampageSize*@parampageNo*@return*/@GetMapping(value="/v1/page")publicObjectpage1(intpageSize,intpageNo){MapresultMap=newHashMap<>(8);resultMap.put("pageSize",pageSize);resultMap.put("pageNo",pageNo);返回结果图;}请求测试结果:3.通过RequestParam参数设置获取/***通过RequestParam参数设置获取*RequestParam可以设置默认值*@parampageSize*@parampageNo*@return*/@GetMapping(value="/v2/page")publicObjectpage2(@RequestParam(defaultValue="10",name="pageSize")intpageSize,@RequestParam(defaultValue="0",name="pageNo")intpageNo){MapresultMap=newHashMap<>(8);resultMap.put("pageSize",pageSize);resultMap.put("pageNo",pageNo);返回结果图;}请求测试结果:设置默认值后,如果不传参数,则使用默认值4.通过RequestBody封装对应的JavaBean对象传递参数/***通过RequestBody封装对应的JavaBean对象传递参数*@paramuser*@return*/@GetMapping(value="/saveUser")publicObjectsaveUser(@RequestBodyUserDTOuser){MapresultMap=newHashMap<>(8);user.setId(UUID.randomUUID().toString());resultMap.put("用户",用户);返回结果图;}请求测试结果:5.从header中获取参数/***从header中获取参数*@paramaccessToken*@paramuserId*@return*/@GetMapping(value="/getHeader")publicObjectgetHeader(@RequestHeader("accessToken")StringaccessToken,StringuserId){MapresultMap=newHashMap<>(8);resultMap.put("accessToken",accessToken);resultMap.put("userId",userId);返回结果图;}请求测试结果:6.HttpServletRequest获取请求中的参数/***从HttpServletRequest获取*@paramrequest*@return*/@GetMapping(value="/servletRequest")publicObjecttestRequest(HttpServletRequestrequest){MapresultMap=newHashMap<>(8);StringuserId=request.getParameter("userId");resultMap.put("userId",userId);返回结果图;}请申请测试结果: