响应模板

发出来的接口返回的响应结果应该尽可能的规范统一,可以去看规范来开发自己的接口。一个比较好的响应规范应该要有状态码(code)、信息描述(msg)、数据(data)。

下面我展示一下自己的开发模板:

```java @Data public class Result implements Serializable {

private int code;//200表示正常,非200表示异常
private String msg;//结果返回的信息
private Object data;//结果返回的数据

//请求成功的响应
public static Result success(Object data){
    return success(200,"请求成功",data);
}

//自定义成功相应的信息内容
public static Result success(int code,String msg,Object data){
    Result result=new Result();
    result.setCode(code);
    result.setMsg(msg);
    result.setData(data);
    return result;
}

//请求失败
public static Result fail(int code,String msg){
    return fail(code,msg,null);
}

//自定义失败相应的信息内容
public static Result fail(int code,String msg,Object data){
    Result result=new Result();
    result.setCode(code);
    result.setMsg(msg);
    result.setData(data);
    return result;
}

```

接口controller

编写这个controller这个类,需要在类的前面加上注解@RestController,或者在每个方法前面加上@ResponseBody。我建议使用@RestController。

spring boot基础api spring boot api接口开发_spring boot

请求方式 请求方式的注解有: ```java @RequestMapping //一般用于全局设置,对应一个模块

/* * rest请求方式主要有以下几种: * get:主要用来获取资源,对应的注解:@GetMapping * post:用来建立新的资源,对应的注解:@PostMapping * put:用来更新资源,对应的注解:@PutMapping * delete:用来删除资源,对应的注解:@DeleteMapping * */ ```

参数的传递

@PathVariable

获取路径参数。即url/{id}这种形式。

@RequestParam

获取查询参数。即url?name=这种形式

注意:@GetMapping是没有请求体的,也就是说它大部分都是采用上面的两种方式

java @GetMapping("/demo/{id}") public void demo(@PathVariable(name = "id") String id, @RequestParam(name = "name") String name) { System.out.println("id="+id); System.out.println("name="+name); } 那么当get方法的参数过于复杂的时候怎么处理?

java public List<String> getName(@RequestParam String queryDtoStr) { QueryDto queryDto = new Gson().fromJson(queryDtoStr, QueryDto .class); // .... return new ArrayList<>(); } 前端的请求就变成了:

http://localhost:8080/app/names?queryDtoStr={"query1":12,"query2":2,"query3":2}

@RequestBody

这个就是请求体参数,前端一般是用json串来传递给后端的。后端可以采用一个实体bean来接受参数。

java public void doInsert(@RequestBody ApiUser apiUser) { AfaUser user = BeanUtils.copyBean(apiUser, AfaUser.class); userService.addAfaUser(user); }

也可以是这样的

java @PostMapping(path = "/demo1") public void demo1(@RequestBody Map<String, String> person) { System.out.println(person.get("name")); }

状态码

状态码必须精确,客户端的每一次请求,服务器都必须给出回应。回应包括 HTTP 状态码和数据两部分。

HTTP 状态码就是一个三位数,分成五个类别。

```

1xx:相关信息

2xx:操作成功

3xx:重定向

4xx:客户端错误

5xx:服务器错误

```

这五大类总共包含100多种状态码,覆盖了绝大部分可能遇到的情况。每一种状态码都有标准的(或者约定的)解释,客户端只需查看状态码,就可以判断出发生了什么情况,所以服务器应该返回尽可能精确的状态码。

常用状态码

``` 200 OK 201 Created 204 No Content

301 永久重定向 302 暂时重定向

400 服务器不理解客户端的请求,未做任何处理。 401 用户未提供身份验证凭据,或者没有通过身份验证。 403 用户通过了身份验证,但是不具有访问资源所需的权限。 404 所请求的资源不存在,或不可用。 405 用户已经通过身份验证,但是所用的 HTTP 方法不在他的权限之内。 410 所请求的资源已从这个地址转移,不再可用。 415 客户端要求的返回格式不支持。 422 客户端上传的附件无法处理,导致请求失败。 429 客户端的请求次数超过限额。

500 客户端请求有效,服务器处理时发生了意外。 503 服务器无法处理请求,一般用于网站维护状态。 ```