博主介绍:全网粉丝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);
}