Result工具类,作为数据流传输对象

本文介绍了Java中的Result类作为数据传输对象(DTO)的实现,用于统一返回值类型并封装响应数据。Result类包含状态、消息和泛型数据字段,便于复用。示例展示了在Service层中如何使用Result类返回查询结果,并通过AreaInfoConvert接口将DO对象转换为DTO。此外,还讨论了在大型项目中使用DTO的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Result类作为数据传输对象,这个对象是DTO

import com.google.gson.Gson;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import java.io.Serializable;

@ApiModel("响应对象")
public class Result<T> implements Serializable {
    private static final long serialVersionUID = -8614669828681890797L;
    public static final int SUCCESS = 1;
    public static final int FAIL = 0;
    @ApiModelProperty(
            value = "结果码",
            dataType = "Integer",
            required = true
    )
    private int status;
    @ApiModelProperty(
            value = "结果描述",
            dataType = "String",
            required = true
    )
    private String message;
    @ApiModelProperty("响应数据对象")
    private T data;

    public Result() {
    }

    public Result(int status, String message) {
        this.status = status;
        this.message = message;
        this.data = null;
    }

    public Result(T data) {
        this.status = 1;
        this.message = "SUCCESS";
        this.data = data;
    }

    public Result(int status, T data, String message) {
        this.status = status;
        this.data = data;
        this.message = message;
    }

    @Override
    public String toString() {
        Gson gson = new Gson();
        return gson.toJson(this);
    }

    public static <T> Result<T> custom(int status, T t, String message) {
        return new Result(status, t, message);
    }

    public static <T> Result<T> custom(int status, String message) {
        return new Result(status, message);
    }

    public static <T> Result<T> success(T t, String message) {
        return new Result(1, t, message);
    }

    public static <T> Result<T> success(String message) {
        return new Result(1, message);
    }

    public static <T> Result<T> fail(T t, String message) {
        return new Result(0, t, message);
    }

    public static <T> Result<T> fail(String message) {
        return new Result(0, message);
    }

    public static Result<String> success() {
        return new Result(1, "OK");
    }

    public static Result<String> fail() {
        return new Result(0, "FAIL");
    }

    public int getStatus() {
        return this.status;
    }

    public String getMessage() {
        return this.message;
    }

    public T getData() {
        return this.data;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public void setData(T data) {
        this.data = data;
    }
}

注释:这个属于一种工具类,目的是方便以后的复用(基本所有的DO对象都可以通多DTO转化为VO),可以统一返回值的类型,里面可以封装一些东西,T是通用的泛型,里面可以装各种各样的对象。

2、使用实例:

    @Override
    public Result selectAreaListById(String id) {

        if (null == id || "".equals(id.trim())){
            id = "0" ;
        }

        List<AreaInfo> areaInfos =  areaDao.selectAreaListById(id) ;

        if (null != areaInfos && areaInfos.size()>0){
            List<AreaInfoDTO> areaInfoDTOList=  AreaInfoConvert.INSTANCE.doList2DtoList(areaInfos) ;
            return  Result.success(areaInfoDTOList,"查询成功") ;
        }

        return Result.fail("数据为空,查询失败");
    }

注释:因为是DTO,数据流传输对象,所以使用的场景是service层中的,传递出来的data会被转到VO实体类中去,显示在前端。

如果项目小使用会比较麻烦,但是如果项目比较大,也是很有好处的。

3、DO通过convert这个接口类,转化为DTO

package com.chaoxing.user.convert;

import com.user.beans.DO.AreaInfo;
import com.user.beans.DO.UserInfo;
import com.user.beans.DTO.AreaInfoDTO;
import com.user.beans.VO.RegisterVO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;

import java.util.List;

@Mapper
public interface AreaInfoConvert {
    AreaInfoConvert INSTANCE = Mappers.getMapper(AreaInfoConvert.class);

    AreaInfoDTO do2Dto(AreaInfo areaInfo) ;

    List<AreaInfoDTO> doList2DtoList(List<AreaInfo> areaInfos);
}

注释:DO是数据库对象,DTO是数据传输对象,VO前端返回对象。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值