基础篇-SpringBoot HTTP接口实战

一、基础P接相关注解说明

SpringBoot的口实Controller中经常会用到注解@Controller、@RestController、基础P接@RequestMapping、口实@RequestParam、基础P接@PathVariable、口实@RequestBody等。基础P接以下针对这些注解简单使用。口实

1、基础P接@Controller

用于定义控制器类,口实在spring项目中由控制器负责将用户发来的基础P接URL请求转发到对应的服务接口(service层),一般这个注解在类中,口实通常方法需要配合注解@RequestMapping。基础P接

@Controller

@RequestMapping("/demo")

public class HttpController {

@RequestMapping(value = "/hello")

public String sayHello() {

System.out.println("hello world!");

return "hello";

}

}

2、口实@RestController

用于定义控制器类,基础P接注解是@Controller和@ResponseBody的合集,表示这是个控制器bean,并且是将函数的返回值直接填入HTTP响应体中,是REST风格的控制器。

@RestController

@RequestMapping("/demo")

public class RestHttpController {

@RequestMapping(value = "/rest")

public Object rest() {

MapresultMap = new HashMap<>(8);

resultMap.put("msg","i am rest controller test");

resultMap.put("code","10000");

return resultMap;

}

}

请求返回:

{"msg":"i am rest controller test","code":"10000"}

3、@RequestMapping

作用于类或者方法上,用于映射URL路径,将http的请求地址映射到控制器(controller)类的处理方法上。

参数说明:

value:定义处理方法的请求的香港云服务器 URL 地址。(重点)method:定义处理方法的 http method 类型,如 GET、POST 等。(重点)params:定义请求的 URL 中必须包含的参数。或者不包含某些参数。(了解)headers:定义请求中 Request Headers 必须包含的参数。或者不包含某些参数。(了解)

衍生注解:

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")

public class RestHttpController {

@RequestMapping(value = "/rest")

public Object rest() {

MapresultMap = new HashMap<>(8);

resultMap.put("msg","i am rest controller test");

resultMap.put("code","10000");

return resultMap;

}

@PostMapping("/post")

public Object post(){

MapresultMap = new HashMap<>(8);

resultMap.put("msg","i am post mapping test");

resultMap.put("code","10000");

return resultMap;

}

@GetMapping("/get")

public Object get(){

MapresultMap = new HashMap<>(8);

resultMap.put("msg","i am get mapping test");

resultMap.put("code","10000");

return resultMap;

}

@PutMapping("/put")

public Object put(){

MapresultMap = new HashMap<>(8);

resultMap.put("msg","i am put mapping test");

resultMap.put("code","10000");

return resultMap;

}

@DeleteMapping("/delete")

public Object delete(){

MapresultMap = new HashMap<>(8);

resultMap.put("msg","i am delete mapping test");

resultMap.put("code","10000");

return resultMap;

}

@PatchMapping("/patch")

public Object patch(){

MapresultMap = new HashMap<>(8);

resultMap.put("msg","i am patch mapping test");

resultMap.put("code","10000");

return resultMap;

}

}

4、@RequestParam

作用于方法上,@RequestParam 注解配合 @RequestMapping 一起使用,可以将请求的参数同处理方法的参数绑定在一起。亿华云计算

@GetMapping("/test1")

public Object requestParamTest(@RequestParam("data") String data){

MapresultMap = new HashMap<>(8);

resultMap.put("data","传入参数为:" + data);

resultMap.put("code","10000");

return resultMap;

}curl http://127.0.0.1:8080/demo/test1?data=test_data

{"code":"10000","data":"传入参数为:test_data"}

5、@RequestBody

作用于形参列表上,用于将前台发送过来固定格式的数据【xml 格式或者 json等】封装为对应的 JavaBean 对象,封装时使用到的一个对象是系统默认配置的 HttpMessageConverter进行解析,然后封装到形参上。

@PostMapping("/test2")

public Object requestBodyTest(@RequestBody UserDTO user){

MapresultMap = new HashMap<>(8);

resultMap.put("data","传入参数为:" + user);

resultMap.put("code","10000");

return resultMap;

}curl http://127.0.0.1:8080/demo/test2 -X POST -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}")

public Object pathVariableTest(@PathVariable("data") String data){

MapresultMap = new HashMap<>(8);

resultMap.put("data","传入参数为:" + data);

resultMap.put("code","10000");

return resultMap;

}curl http://127.0.0.1:8080/demo/test3/test_data

{"code":"10000","data":"传入参数为:test_data"}

7、@ResponseBody

使用在控制层(controller)的方法上,将方法的返回值,以特定的格式写入到response的body区域,进而将数据返回给客户端。

当方法上面没有写ResponseBody,底层会将方法的返回值封装为ModelAndView对象。如果返回值是字符串,那么直接将字符串写到客户端;如果是一个对象,会将对象转化为json串,然后写到客户端。

二、b2b供应网HTTP接口请求实战

以GET请求为例,POST,PUT,DELETE类似。

1、PathVariable中获取字段

/

**

* 通过@PathVariable解析url请求中占位符参数({XXX})的值绑定到方法的形参中

* @param deptId

* @param userId

* @return

*/

@GetMapping("/{deptId}/{userId}")

public Object queryUser(@PathVariable("deptId")String deptId,

@PathVariable("userId")String userId){

MapresultMap = new HashMap<>(8);

resultMap.put("deptId",deptId);

resultMap.put("userId",userId);

return resultMap;

}

请求测试结果:

2、params中获取参数

/

**

* params中获取参数

* @param pageSize

* @param pageNo

* @return

*/

@GetMapping(value = "/v1/page")

public Object page1(int pageSize,int pageNo){

MapresultMap = new HashMap<>(8);

resultMap.put("pageSize",pageSize);

resultMap.put("pageNo",pageNo);

return resultMap;

}

请求测试结果:

3、通过RequestParam参数设定获取

/

**

* 通过RequestParam参数设定获取

* RequestParam可设置默认值

* @param pageSize

* @param pageNo

* @return

*/

@GetMapping(value = "/v2/page")

public Object page2(@RequestParam(defaultValue = "10",name="pageSize") int pageSize,

@RequestParam(defaultValue = "0",name="pageNo") int pageNo){

MapresultMap = new HashMap<>(8);

resultMap.put("pageSize",pageSize);

resultMap.put("pageNo",pageNo);

return resultMap;

}

请求测试结果:

设置默认值后,不传参会使用默认值。

4、通过RequestBody封装为对应的 JavaBean 对象传参

/

**

* 通过RequestBody封装为对应的 JavaBean 对象传参

* @param user

* @return

*/

@GetMapping(value = "/saveUser")

public Object saveUser(@RequestBody UserDTO user){

MapresultMap = new HashMap<>(8);

user.setId(UUID.randomUUID().toString());

resultMap.put("user",user);

return resultMap;

}

请求测试结果:

5、header获取参数

/

**

* 从header获取参数

* @param accessToken

* @param userId

* @return

*/

@GetMapping(value = "/getHeader")

public Object getHeader(@RequestHeader("accessToken") String accessToken,String userId){

MapresultMap = new HashMap<>(8);

resultMap.put("accessToken",accessToken);

resultMap.put("userId",userId);

return resultMap;

}

请求测试结果:

6、HttpServletRequest获取请求中的参数

/

**

* HttpServletRequest中获取

* @param request

* @return

*/

@GetMapping(value ="/servletRequest")

public Object testRequest(HttpServletRequest request){

MapresultMap = new HashMap<>(8);

String userId = request.getParameter("userId");

resultMap.put("userId",userId);

return resultMap;

}

请求测试结果:

数据库
上一篇:Ubuntu 的笔记本来到一个局域网里,插上网线,网线指示灯亮,但是连不上网,点击网络连接图标,显示“网络未托管”。突然想起这台笔记本前阵子设置过 PPPOE(有线宽带虚拟拨号),于是进行了一番设置改动,最终解决了问题。1、Ubuntu 的笔记本来到一个局域网里,有点认生。插上网线,网线指示灯亮,但是连不上网,点击网络连接图标,显示“网络未托管”。突然想起这台笔记本前阵子设置过 PPPOE(有线宽带虚拟拨号),怀疑是它的原因。2、按 Ctrl + Alt + t,调出终端。3、键入命令:cd /etc/network,转入 /etc/network 这个目录,它里面有个文件叫 interfaces。4、然后键入命令:sudo gedit interfaces,意思是调用 gedit 文本编辑器,并打开 interfaces 这个文件。这个文件的最后一行是:iface eth0 inet manual,意思是,eth0 这个网络界面(个人电脑上,eth0 一般指的就是唯一的一个网线接口),需要手动设置网络。5、但是,当前的这个局域网,明显是 DHCP 网络,也就是接入的电脑需要“自动获取网络”地址。我们在这行字符前面加个英文的“#”,“注释”掉这一行,意思是不要手动设置网络了,而是转为自动设置。注意一定是英文的“#”,否则输入中文的话,就起不到“注释”的作用了。6、保存文件、关闭 gedit 文本编辑器,回到终端,键入命令:sudo service network-manager restart,意思是重新启动网络管理服务。按下回车,网络立刻连接。以后离开这个局域网,需要重新使用虚拟拨号时,只要按照第 4、5 步骤的方法,把加上的那个“#”去掉,然后再重启网络管理服务,就行了。
下一篇:以730显卡2G为主题的完整评测(性能表现一览及适用场景)