设置通用的返回对象

为什么需要设置统一的返回对象

在企业级开发中。对于返回的信息需要有统一规范的处理。一、方便用户了解到是什么原因造成,以方便用户改正。二、由于现在大部分是前后分离,统一的返回处理对于前端开发人员来说,能快捷的判断什么返回信息该做什么样的处理。三、方便维护。统一的返回对象能够清晰明了的了解原因。四、方便开发,如果需要使用返回的时候直接调用这个对象就可以了。

如何使用

创建统一的返回方法
/**
 * 通用返回对象,所有http接口都必须返回此对象
 *
 * @author
 * @since
 */
 //lombok注解:注解后在编译时会自动加Getter,Setter,equals,canEqual,hasCode,toString等方法。
@Data
//lombok注解:添加一个构造函数,该构造函数含有所有已声明字段属性参数
@AllArgsConstructor
//lombok注解:创建一个无参构造函数
@NoArgsConstructor
//实体类与json互转的时候 属性值为null的不参与序列化
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Response<T> implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 响应代码
     */
    @ApiModelProperty("响应代码")
    protected Integer code;

    /**
     * 响应消息
     */
    @ApiModelProperty("响应消息")
    protected String msg;

    /**
     * 响应数据
     */
    @ApiModelProperty("响应数据")
    protected T data;

    /**
     * 成功
     *
     * @param msg 消息
     * @param <T> 返回数据类型
     * @return DataResponse
     */
    public static <T> Response<T> success(String msg) {
        return new Response<>(200, msg, null);
    }


    /**
     * 成功
     *
     * @param data 消息
     * @param <T>  返回数据类型
     * @return DataResponse
     */
    public static <T> Response<T> data(T data) {
        return new Response<>(200, "成功", data);
    }

    /**
     * 成功
     *
     * @param msg  消息
     * @param data 数据
     * @param <T>  返回数据类型
     * @return DataResponse
     */
    public static <T> Response<T> success(String msg, T data) {
        return new Response<>(200, msg, data);
    }

    /**
     * 失败
     *
     * @return Response
     */
    public static <T> Response<T> failed() {
        CommonError error = CommonError.error();
        return new Response<>(error.getCode(), error.getMsg(), null);
    }

    /**
     * 失败
     *
     * @return Response
     */
    public static <T> Response<T> failed(String msg) {
        CommonError error = CommonError.error(msg);
        return new Response<>(error.getCode(), error.getMsg(), null);
    }

    /**
     * 失败
     *
     * @return Response
     */
    public static <T> Response<T> failed(CommonError error) {
        return new Response<>(error.getCode(), error.getMsg(), null);
    }

    /**
     * @param code 代码
     * @param msg  消息
     * @param data 数据
     * @param <T>  数据类型
     * @return 结果
     */
    public static <T> Response<T> response(int code, String msg, T data) {
        return new Response<>(code, msg, data);
    }

    /**
     * 判断响应结果是否成功
     *
     * @return 结果
     */
    //@ApiModelProperty("响应状态")
    public boolean isSuccess() {
        if (Objects.isNull(code)) {
            return false;
        }

        return Objects.equals(Integer.valueOf("200"), code);
    }

}

调用举例
controller
	//restful 风格API 
 	@GetMapping("/{id}")
 	//@PathVariable("id")  :绑定URI模板变量值,用来获得请求url中的动态参数
    public Response queryById(@PathVariable("id") Long id) {
    	//统一返回response 将数据放入data中
        return Response.data(comOrganizationService.getById(id));
    }

@PostMapping("/query/page")
    public Response page(@RequestBody @Valid ComOrganizationQueryParam param) {
        try {
            log.info("分页查询租户供应商");
            QueryWrapper<ComOrganization> queryWrapper = new QueryWrapper<ComOrganization>();
            queryWrapper.eq(param.getCompanyId() != null && param.getCompanyId() != 0, "companyid", param.getCompanyId());
            queryWrapper.eq(param.getDepartmentId() != null && param.getDepartmentId() != 0, "department_id", param.getDepartmentId());
            queryWrapper.select(BeanUtils.getSqlSelect(ComOrganization.class));
            queryWrapper.orderDesc("id");
            IPage<ComOrganization> page = new Page<ComOrganization>(Long.parseLong(param.getPageNumber()), Long.parseLong(param.getPageSize()));
            return Response.data(comOrganizationService.page(page, queryWrapper));
        } catch (ServiceException e) {
            return Response.failed(e.getError().getMsg());
        } catch (Exception e) {
            log.error("分页查询供应商异常", e);
            return Response.failed("分页查询供应商异常");
        }
    }
    
Response
上面举例中已经使用到的一下列出来方便对比。
    /**
     * 成功
     *
     * @param data 消息
     * @param <T>  返回数据类型
     * @return DataResponse
     */
    public static <T> Response<T> data(T data) {
        return new Response<>(200, "成功", data);
    }
        /**
     * 失败
     *
     * @return Response
     */
    public static <T> Response<T> failed(String msg) {
        CommonError error = CommonError.error(msg);
        return new Response<>(error.getCode(), error.getMsg(), null);
    }

    /**
     * 失败
     *
     * @return Response
     */
    public static <T> Response<T> failed(CommonError error) {
        return new Response<>(error.getCode(), error.getMsg(), null);
    }
    

结语

有了统一的返回对象。代码少了,更规范化了,维护也更简单了。因为最近这个项目用到了这些东西,以前也没有专门的整理出来,现在整理出来给自己留个记录,也为众多初学者提供一个学习的地方。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: FastAPI 是一个 Python Web 框架,可用于快速构建 API。 要在 FastAPI 中设置通用路径,您可以使用 `prefix` 参数。例如,如果要设置所有路由的前缀为 `/api`,您可以在路由装饰器(如 `@app.get`)的上方添加 `@app.prefix("/api")` 装饰器。 例如: ```python from fastapi import FastAPI app = FastAPI() @app.prefix("/api") @app.get("/users/{user_id}") async def read_user(user_id: int): return {"user_id": user_id} ``` 在这个例子中,路由的实际路径将是 `/api/users/{user_id}`。 如果要设置多个路由的前缀,可以使用 `app.include_router` 函数,并传递路由对象以及要设置的前缀。例如: ```python from fastapi import FastAPI from fastapi import APIRouter app = FastAPI() router = APIRouter() @router.get("/users/{user_id}") async def read_user(user_id: int): return {"user_id": user_id} app.include_router(router, prefix="/api") ``` 在这个例子中,路由的实际路径将是 `/api/users/{user_id}`。 希望这些信息对您有帮助。 ### 回答2: FastAPI是一个快速(fast)和易于使用的Web框架,可以轻松地设置通用路径。 要设置通用路径,首先需要导入FastAPI库并创建一个应用程序实例。然后,可以使用装饰器(Decorators)来定义路由处理程序。装饰器的名称决定了路径的一部分,函数的名称决定了方法的一部分。 例如,下面的代码演示了如何设置通用路径: ``` from fastapi import FastAPI app = FastAPI() @app.get("/items/{item_id}") async def read_item(item_id: int): return {"item_id": item_id} ``` 在这个例子中,使用了`@app.get`装饰器将`read_item`函数绑定到`/items/{item_id}`路径上。`{item_id}`是一个路径参数,可以在函数的参数列表中进行使用。当用户访问`/items/1`时,该函数会返回`{"item_id": 1}`。 为了使路径参数成为可选的,可以使用默认值。例如,下面的代码所示: ``` @app.get("/items/{item_id}") async def read_item(item_id: int, q: str = None): return {"item_id": item_id, "q": q} ``` 在这个例子中,`q`是一个可选的查询参数。当用户访问`/items/1?q=test`时,函数会返回`{"item_id": 1, "q": "test"}`。如果用户只访问`/items/1`,函数会返回`{"item_id": 1, "q": None}`。 使用FastAPI的通用路径可以轻松地处理不同的请求,从而实现灵活和高效的API开发。以上仅是对设置通用路径的简单介绍,更多关于FastAPI的功能和用法可以参考官方文档。 ### 回答3: FastAPI可以通过使用公共路径设置来管理API端点的URL结构。公共路径是在应用程序级别定义的路径,可以在多个路由中重复使用。 要设置公共路径,首先需要创建一个FastAPI应用程序实例,并使用`APIRouter`创建一个路由器对象。 ```python from fastapi import FastAPI, APIRouter app = FastAPI() router = APIRouter() ``` 然后,可以使用路由器对象的装饰器方法(如`@router.route()`)为不同的API端点添加具体的路径。 ```python @router.get("/endpoint1") def endpoint1(): return {"message": "This is endpoint 1"} @router.get("/endpoint2") def endpoint2(): return {"message": "This is endpoint 2"} ``` 最后,将路由器添加到FastAPI应用程序实例中。 ```python app.include_router(router, prefix="/api") ``` 在上面的示例中,路由器中的端点路径将添加到公共路径`/api`之后。因此,实际的API端点路径将是`/api/endpoint1`和`/api/endpoint2`。 通过设置公共路径,我们可以更好地组织和管理API的URL结构,提高代码的可维护性和可重用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值