JsonResult工具类

这篇博客介绍了在前后端分离的项目中,如何使用JsonResult工具类来规范SpringBoot返回JSON格式的数据。作者讨论了使用JavaBean与Map集合的优缺点,并提到在使用@RestController注解时,Spring Boot会自动利用Jackson将对象转换为JSON字符串,以适应layui等前端框架的数据需求。

JsonResult工具类

最近学习前后端分离,前端是layui,SpringBoot需要返回json字符串,为了规范返回格式,参照了几个JsonResult工具类。部分是使用的一个JavaBean,即只包含私有属性和get/set方法的对象。定义了code、msg和data这三个属性,我一开始就使用的是这个,但layui中加载table的时候还需要返回一个count值,可以考虑继承或者再增加一个count属性。但这样做如果再需要返回一个其它值又会麻烦。所以我考虑直接使用一个Map集合来存储,需要额外返回的时候直接使用put即可加入一个新的返回值。
在controller层加上@RestController 可直接返回list、map、JavaBean对象等,Spring Boot默认使用Jackson会自动将该对象转换为json字符串

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/*
    使用@RestController或@ResponseBody时,可直接返回该对象,
    Spring Boot默认使用Jackson会自动将该对象转换为json字符串
    如{"code": 0,"msg": "","data": [{}, {}]}
 */
public class JsonResult extends HashMap<String, Object> implements Serializable {
    public static final long serialVersionUID = 1L;

    public static final int SUCCESS = 0;
    public static final int FAIL = 1;
    public static final int ERROR = 2;
    public static final int LOGOUT = 1001;

    public JsonResult(int code, String msg, Object data) {
        super(3);  //继承自Map,设置初始容量
        this.put("code", code); //状态码,layui中code=0表示成功
        this.put("msg", msg);   //提示消息
        this.put("data", data); //数据体
    }

    //一般返回code、msg和data这三个即可,但layui加载table时还要求count值
    //添加额外的返回值
    public JsonResult put(String key, Object value) {
        super.put(key, value);
        return this;
    }

    //快速返回请求成功
    public static JsonResult success(Object data) {
        return new JsonResult(SUCCESS, "ok", data);
    }

    //快速返回请求失败
    public static JsonResult fail(String msg) {
        return new JsonResult(FAIL, msg, null);
    }

    public static JsonResult error(String msg, Object data) {
        return new JsonResult(ERROR, msg, data);
    }

    public static JsonResult logout() {
        return new JsonResult(LOGOUT, "未登录", null);
    }

    //快速生成一个Map键值对
    public static Map<String, Object> fastMap(String key, Object value) {
        Map<String, Object> data = new HashMap<>(1);
        data.put(key, value);
        return data;
    }
}

除data内容添加额外的返回键值对(layui中使用table时需要额外的count)

return JsonResult.success(list).put("count", count);
### 常用 Java 第三方工具类推荐 #### Apache Commons IO Utils `org.apache.commons.io.IOUtils` 是处理输入输出流的强大工具类之一。该工具类提供了许多静态方法来简化文件读写操作以及资源关闭等常见任务[^1]。 ```java import org.apache.commons.io.IOUtils; // 示例:复制InputStream到OutputStream并自动关闭两者 IOUtils.copy(inputStream, outputStream); ``` #### Apache Commons Lang StringUtils 来自 `org.apache.commons.lang3` 的 `StringUtils` 提供了一系列用于字符串处理的方法,比如去除空白字符、判断字符串是否为空或仅含空格等功能[^3]。 ```java import org.apache.commons.lang3.StringUtils; public class Example { public static void main(String[] args) { boolean isEmpty = StringUtils.isEmpty(null); // true String trimmed = StringUtils.trimToEmpty(" hello world "); // "hello world" } } ``` #### JSON 处理库 Jackson 或 Gson 对于JSON序列化/反序列化的场景下,Jackson 和 Google 的Gson都是非常流行的解决方案。它们能够轻松地把对象转换成JSON格式的数据,并支持复杂的嵌套结构。 ```json // Maven dependency for Jackson <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.13.0</version> </dependency> // 使用Jackson进行简单的POJO与JSON互转 ObjectMapper mapper = new ObjectMapper(); User user = mapper.readValue(jsonInString, User.class); String jsonResult = mapper.writeValueAsString(user); ``` #### HTTP 请求客户端 HttpClient / OkHttp 当涉及到网络请求时,Apache HttpComponents下的HttpClient或是Square公司的OkHttp都是不错的选择。这些库可以帮助开发者更方便快捷地发起HTTP(S)请求并获取响应结果。 ```xml <!-- Maven dependency for OkHttp --> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.9.3</version> </dependency> ``` ```java OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://api.github.com") .build(); Response response = client.newCall(request).execute(); if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); System.out.println(response.body().string()); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值