请求与响应
BS架构
cs(客户端服务架构模式)是需要下载相应的软件来与服务端进行交互
请求
简单参数
- 通过最原始的httpservletrequest来获取请求数据
在idea中编写代码,启动springboot,然后使用postman工具模拟发起请求.
代码:
@RestController
public class SimpleRequest {
@RequestMapping("/simplePara")
public String simplePara(HttpServletRequest request)
{
String name=request.getParameter("name");
String ageStr =request.getParameter("age");
int age=Integer.parseInt(ageStr);
System.out.println(name + " " + age);
return "OK";
}
}
postman工具的请求书写:,根据上面代码得到返回值为ok
繁琐不推荐,还需手动转换数据
- SpringBoot方式
参数名与形参名相同即可获取数据
代码:
@RequestMapping("/simplePara")
public String simplePara(String name,String age)
{
System.out.println(name + " " + age);
return "OK";
}
RequestParam注解中的required 默认为true,如果请求中没有对应的数据就会报错,如果设置为false就是可选的(传或不传都行)
实体参数
当对象的属性较多时,我们可以尝试去封装成一个javabean对象然后通过传递对象到方法
代码:
@RequestMapping("/simplePogo")
public String simplePara(User user)
{
System.out.println(user);
return "OK";
}
数组参数集合
请求参数名与形参数组名称相同且请求参数为多个时,定义数组类型形参即可接受数据
- 使用数组来接收
代码:
//使用数组来接收
@RequestMapping("/arrayParam")
public String arrayParam(String[] hobby)
{
System.out.println(Arrays.toString(hobby));
return "OK";
}
- 使用集合来接收
请求参数多个,请求参数名与集合名称相同,需要使用@RequestParam绑定参数关系
//使用集合来接收
@RequestMapping("/listParam")
public String listParam(@RequestParam List<String> hobby)
{
System.out.println(hobby);
return "OK";
}
日期参数
需使用@DateTimeFormat来规定日期格式,规定请求里面的日期格式 LocalDateTime类是jdk中已经存在的
代码:
//日期时间参数
@RequestMapping("/dateParam")
public String dateParam(@DateTimeFormat(pattern ="yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime)
{
System.out.println(updateTime);
return "OK";
}
JSON参数
JSON的key名应与形参对象属性名相同,形参前面需用@RequestBody来标识
Json对象的请求:
服务端交互的代码:
@RequestMapping("/JsonParam")
public String dateParam(@RequestBody User user)
{
System.out.println(user);
return "OK";
}
user对象和address对象是属于包含类的关系,此时我们可以重新创建一个address类,然后在user类中定义address对象,然后重写toString方法
private String name;
private String age;
private address address;//引用对象
.....//中间省略...
public String toString() {
return "User{name = " + name + ", age = " + age + ", address= " + address + "}";
}
路径参数
路径后面的参数要是可变的,要在形参中添加@PathVariable 来修饰id
@RequestMapping("/path/{id}/{name}")
public String pathParam(@PathVariable Integer id,@PathVariable String name)
{
System.out.println(id);
System.out.println(name);
return "OK";
}
响应
为了使响应的格式更加完整,可以将所有的数据封装到一个result类当中,result包括状态码,提示信息,数据.返回的数据会已json的形式返回
result代码
/**
* 统一响应结果封装类
*/
public class Result {
private Integer code ;//1 成功 , 0 失败
private String msg; //提示信息
private Object data; //数据 date
public Result() {
}
public Result(Integer code, String msg, Object data) {
this.code = code;
this.msg = msg;
this.data = data;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
***//响应成功的时候可以将可以用类名Result来调用success方法将数据传入,
//然后返回result对象***
public static Result success(Object data){
return new Result(1, "success", data);
}
public static Result success(){
return new Result(1, "success", null);
}
public static Result error(String msg){
return new Result(0, msg, null);
}
@Override
public String toString() {
return "Result{" +
"code=" + code +
", msg='" + msg + '\'' +
", data=" + data +
'}';
}
}
返回请求的代码:
此处仅以list形式来返回,也可以用其他的数据,将数据放入success方法中即可
@RequestMapping("/listParam")
public Result listParam()
{
ArrayList <address> list=new ArrayList<>();
list.add(new address("广东","广州"));
list.add(new address("湖南","长沙"));
return Result.success(list);
}
响应回来的是json数据
前端页面文件放在resource的static下面