公司项目JAVA开发规范总结(一)——统一接口返回规范

一、统一接口返回规范

1、统一返回视图类

概述:所有的接口返回,都应按照该格式去进行返回给前端

PacketHttpRes_V32类:

@Data
@Accessors(chain = true)
@JsonIgnoreProperties(allowSetters = true, value = {"httpStatus"})
@ApiModel("PacketHttpRes_V32")
public class PacketHttpRes_V32<T> {

	@ApiModelProperty(value = "结果码 200:成功 500:具体异常信息 400:参数异常 401:未授权的请求 403:无权访问")
	@JSONField(name="ReturnCode")
	private Integer returnCode;

	@ApiModelProperty(value = "接口请求结果描述信息")
	@JSONField(name="ReturnCode_Msg")
	private String returnCode_Msg;

	@ApiModelProperty(value = "错误码 0:正常 1:名称重复 2:不存在 3:数量超出限制 4:")
	@JSONField(name="ResultCode")
	private Integer resultCode;

	@ApiModelProperty(value = "业务处理结果描述信息")
	@JSONField(name="ResultCode_Msg")
	private String resultCode_Msg;

	@ApiModelProperty(value = "业务处理结果数据体")
	@JSONField(name="Data")
	private T data;
	
	public PacketHttpRes_V32() {}

	public PacketHttpRes_V32(Integer returnCode, String returnCode_Msg, Integer resultCode, String resultCode_Msg,
				   T data) {
		super();
		this.returnCode = returnCode;
		this.returnCode_Msg = returnCode_Msg;
		this.resultCode = resultCode;
		this.resultCode_Msg = resultCode_Msg;
		this.data = data;
	}

}

为了更加方便使用,已对该类进行静态方法封装,如下:

public static <T> PacketHttpRes_V32<T> makeOKResponse() {
	return new PacketHttpRes_V32<T>()
			.setReturnCode(ReturnCode.success_code)
			.setReturnCode_Msg(ReturnCode.success_message)
			.setResultCode(ReturnCode.err_nomean_code)
			.setResultCode_Msg(ReturnCode.err_nomean_message)
			.setData(null);
}

public static <T> PacketHttpRes_V32<T> makeOKResponse(T data) {
    return new PacketHttpRes_V32<T>()
        .setReturnCode(ReturnCode.success_code)
        .setReturnCode_Msg(ReturnCode.success_message)
        .setResultCode(ReturnCode.err_nomean_code)
        .setResultCode_Msg(ReturnCode.err_nomean_message)
        .setData(data);
}

public static <T> PacketHttpRes_V32<T> makeOKResponse(String message) {
    return new PacketHttpRes_V32<T>()
        .setReturnCode(ReturnCode.success_code)
        .setReturnCode_Msg(ReturnCode.success_message)
        .setResultCode(ReturnCode.err_nomean_code)
        .setResultCode_Msg(message);
}

public static <T> PacketHttpRes_V32<T> makeOKResponse(String message, Integer code, T data) {
    return new PacketHttpRes_V32<T>()
        .setReturnCode(ReturnCode.success_code)
        .setReturnCode_Msg(ReturnCode.success_message)
        .setResultCode(code)
        .setResultCode_Msg(message)
        .setData(data);
}

public static <T> PacketHttpRes_V32<T> makeFailResponse(String message) {
    message = Optional.ofNullable(message).orElse(ReturnCode.server_exception_message);
    return new PacketHttpRes_V32<T>()
        .setReturnCode(ReturnCode.success_code)
        .setReturnCode_Msg(ReturnCode.success_message)
        .setResultCode(ReturnCode.err_nomean_code)
        .setResultCode_Msg(message);
}


public static <T> PacketHttpRes_V32<T> makeResponse(Integer returnCode, String returnCodeMessage,
                                          Integer resultCode, String resultCodeMessage, T data) {
    return new PacketHttpRes_V32<T>()
        .setReturnCode(returnCode)
        .setReturnCode_Msg(returnCodeMessage)
        .setResultCode(resultCode)
        .setResultCode_Msg(resultCodeMessage)
        .setData(data);
}

返回例子:

//正确例子
return PacketHttpRes_V32.makeOKResponse(shareTpBaseInfoPage);

//错误例子
PacketHttpRes_V32.setReturnCode(ReturnCode.success_code);
PacketHttpRes_V32.setReturnCode_Msg(ReturnCode.success_message);
PacketHttpRes_V32.setResultCode(ReturnCode.err_nomean_code);
PacketHttpRes_V32.setResultCode_Msg(ReturnCode.err_nomean_message);
PacketHttpRes_V32.setData(shareTpBaseInfoPage);
return PacketHttpRes_V32;

注意:

项目中有:PacketHttpRes 与 PacketHttpRes_V32 两个返回类,PacketHttpRes_V32 为最新的,使用最新的即可

旧版的部分接口使用PacketHttpRes ,所以不能删除PacketHttpRes 类。

2、字段统一返回大驼峰

之前项目都是通过对字段增加@JSONField(name=“XXX”),去将本返回小驼峰字段更改为大驼峰,这极大的耗费了工作时间。

@Configuration
public class FastJsonConfiguration implements WebMvcConfigurer {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        SerializeFilter serializeFilter = new SimplePropertyPreFilter();
        // fastjson转换为大驼峰并过滤掉knife4j的接口,避免导致在线文档出错
        SerializeConfig.getGlobalInstance().addFilter(UiConfiguration.class,serializeFilter);
        SerializeConfig.getGlobalInstance().addFilter(SwaggerResource.class,serializeFilter);
        SerializeConfig.getGlobalInstance()
                .propertyNamingStrategy = PropertyNamingStrategy.PascalCase;
        // jackson转换为大驼峰
        for (int i = 0; i < converters.size(); i++) {
            if (converters.get(i) instanceof MappingJackson2HttpMessageConverter) {
                ObjectMapper objectMapper = new ObjectMapper();
                // 统一返回数据的输出风格
                objectMapper.setPropertyNamingStrategy(
           			com.fasterxml.jackson.databind.PropertyNamingStrategy.UPPER_CAMEL_CASE);
                objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
                objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
                objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));
                MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
                converter.setObjectMapper(objectMapper);
                converters.set(i, converter);
                break;
            }
        }// end for
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值