T系列项目讲解笔记3:后端API接口返回包装类

2024-07-08 10:34:15 浏览数 (2)

博主介绍:全网粉丝10W ,CSDN博客专家、全栈领域优质创作者,3年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型。 研究方向:SpringBoot、Vue.JS、MyBatisPlus、Redis、SpringSecurity、MySQL、小程序、Android、Uniapp等。

一、前后端数据交互机制

Vue.js和Spring Boot作为现代Web开发中流行的前后端技术,它们之间的数据交互机制主要基于RESTful API。Vue.js作为前端框架,通过AJAX请求与后端Spring Boot进行数据交互。以下是一段描述它们数据交互机制的连贯文本:

Vue.js通过使用axios或fetch等HTTP客户端库,向Spring Boot后端发送HTTP请求,如GET、POST、PUT、DELETE等。Spring Boot后端使用Spring MVC框架处理这些请求,并将数据以JSON或XML格式返回给前端。Vue.js接收到响应后,使用响应数据更新其组件状态,从而实现数据的双向绑定和动态更新。这种机制使得前后端分离,提高了开发效率和可维护性,同时也支持了前后端的独立部署和扩展。

在Vue.js中,可以使用Vuex进行状态管理,以更好地组织和维护组件状态。而在Spring Boot后端,可以使用Spring Data JPA或MyBatis等ORM框架进行数据库操作,以实现数据的增删改查。此外,Spring Boot还提供了自动配置、依赖注入等特性,简化了后端开发过程。

总之,Vue.js和Spring Boot的前后端数据交互机制基于RESTful API,通过HTTP请求和响应实现数据的传递和更新。这种机制使得前后端分离,提高了开发效率和可维护性,同时也支持了前后端的独立部署和扩展。


二、状态码

在Java后端开发中,HTTP状态码(HTTP Status Codes)用于表示服务器对客户端请求的响应。以下是一些常见的HTTP状态码及其含义:

2.1:1xx - 信息性状态码

  • 100 Continue:继续发送请求的剩余部分。
  • 101 Switching Protocols:服务器已同意客户端的协议切换请求。

2.2:2xx - 成功状态码

  • 200 OK:请求成功,服务器返回了请求的资源。
  • 201 Created:请求成功,并且服务器创建了新的资源。
  • 202 Accepted:服务器已接受请求,但尚未处理完成。
  • 204 No Content:服务器成功处理了请求,但没有返回任何内容。

2.3:3xx - 重定向状态码

  • 300 Multiple Choices:请求有多个可能的响应。
  • 301 Moved Permanently:请求的资源已被永久移动到新位置。
  • 302 Found:请求的资源临时移动到另一个URI。
  • 304 Not Modified:如果客户端发送了一个带有条件请求的GET请求,并且资源未被修改,则返回此状态码。

2.4:4xx - 客户端错误状态码

  • 400 Bad Request:服务器无法理解请求的格式。
  • 401 Unauthorized:请求需要用户身份验证。
  • 403 Forbidden:服务器理解请求,但拒绝执行。
  • 404 Not Found:服务器找不到请求的资源。
  • 405 Method Not Allowed:请求方法不被允许。
  • 408 Request Timeout:服务器在等待请求时超时。
  • 409 Conflict:请求与服务器上的资源冲突。
  • 413 Payload Too Large:请求实体过大,服务器无法处理。
  • 415 Unsupported Media Type:请求的媒体类型不被服务器支持。

2.5:5xx - 服务器错误状态码

  • 500 Internal Server Error:服务器遇到错误,无法完成请求。
  • 501 Not Implemented:服务器不支持请求的功能。
  • 502 Bad Gateway:服务器作为网关或代理,从上游服务器收到无效响应。
  • 503 Service Unavailable:服务器目前无法使用(由于超载或维护)。
  • 504 Gateway Timeout:服务器作为网关或代理,但未及时从上游服务器接收请求。

在Java后端开发中,可以使用Spring框架的RestTemplate或WebClient等工具来发送HTTP请求,并处理这些状态码。同时,可以使用Spring MVC的@Controller和@RestController注解来处理HTTP请求,并返回相应的状态码。


三、接口备注

msg 这个字段相对理解比较简单,就是发生错误时,如何友好的进行提示。

3.1 定义

代码语言:javascript复制
public R() {
	put("code", 0);
}

public static R error() {
	return error(500, "未知异常,请联系管理员");
}

3.2 使用

代码语言:javascript复制
@RequestMapping("/query")
public R query(JingsaixinxiEntity jingsaixinxi){
    // ......
    return R.ok("查询竞赛信息成功").put("data", jingsaixinxiView);
}

四、返回数据体

data 是返回的数据体,JSON格式,根据不同的业务有不同的JSON体。

4.1 定义

代码语言:javascript复制
public static R ok(Map<String, Object> map) {
	R r = new R();
	r.putAll(map);
	return r;
}

4.2 使用

代码语言:javascript复制
@RequestMapping("/lists")
public R list( JingsaixinxiEntity jingsaixinxi){
    // ......
    return R.ok().put("data", jingsaixinxiService.selectListView(ew));
}

五、完整代码

5.1 定义

代码语言:javascript复制
import java.util.HashMap;
import java.util.Map;

/**
 * 返回数据
 */
public class R extends HashMap<String, Object> {
	private static final long serialVersionUID = 1L;
	
	public R() {
		put("code", 0);
	}
	
	public static R error() {
		return error(500, "未知异常,请联系管理员");
	}
	
	public static R error(String msg) {
		return error(500, msg);
	}
	
	public static R error(int code, String msg) {
		R r = new R();
		r.put("code", code);
		r.put("msg", msg);
		return r;
	}

	public static R ok(String msg) {
		R r = new R();
		r.put("msg", msg);
		return r;
	}
	
	public static R ok(Map<String, Object> map) {
		R r = new R();
		r.putAll(map);
		return r;
	}
	
	public static R ok() {
		return new R();
	}

	public R put(String key, Object value) {
		super.put(key, value);
		return this;
	}
}

5.2 使用

代码语言:javascript复制
/**
 * 列表
 */
@RequestMapping("/lists")
public R list( JingsaixinxiEntity jingsaixinxi){
    EntityWrapper<JingsaixinxiEntity> ew = new EntityWrapper<JingsaixinxiEntity>();
    ew.allEq(MPUtil.allEQMapPre( jingsaixinxi, "jingsaixinxi")); 
    return R.ok().put("data", jingsaixinxiService.selectListView(ew));
}

 /**
 * 查询
 */
@RequestMapping("/query")
public R query(JingsaixinxiEntity jingsaixinxi){
    EntityWrapper< JingsaixinxiEntity> ew = new EntityWrapper< JingsaixinxiEntity>();
    ew.allEq(MPUtil.allEQMapPre( jingsaixinxi, "jingsaixinxi")); 
    JingsaixinxiView jingsaixinxiView =  jingsaixinxiService.selectView(ew);
    return R.ok("查询竞赛信息成功").put("data", jingsaixinxiView);
}

0 人点赞