背景
作为网关,有些时候可能报文的结构并不符合前端或者某些服务的需求,或者因为某些原因,其他服务修改报文结构特别麻烦、或者需要修改的地方特别多,这个时候就需要走网关单独转换一次。
实现
话不多说,直接上代码。
首先,我们定义好配置:
package com.lifengdi.gateway.properties.entity;
import lombok.Data;
import org.springframework.util.CollectionUtils;
import java.util.*;
/**
* 需要转换报文结构的URL地址配置类
*
* @author: Li Fengdi
* @date: 2020-7-11 16:57:07
*/
@Data
public class MessageTransformUrl {
// 接口地址,多个地址使用英文逗号分隔
private String[] paths;
/**
*
格式
*
新字段:老字段
*
若新老字段一致,可以只配置新字段
*/
private List fields;
/**
*
返回体类型,默认为json
*
可配置的类型参见{@link com.lifengdi.gateway.enums.TransformContentTypeEnum}
*
如需自定义配置,可以继承{@link com.lifengdi.gateway.transform.AbstractMessageTransform}类,
* 或者实现{@link com.lifengdi.gateway.transform.IMessageTransform}接口类,重写transform方法
*/
private String contentType;
private Set pathList;
public Set getPathList() {
if (CollectionUtils.isEmpty(pathList) && Objects.nonNull(paths)) {
setPathList(new HashSet<>(Arrays.asList(paths)));
}
return pathList;
}
}
package com.lifengdi.gateway.properties;
import com.lifengdi.gateway.properties.entity.MessageTransformUrl;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 报文结构转换参数配置
* @author: Li Fengdi
* @date: 2020-7-11 16:55:53
*/
@Component
@ConfigurationProperties(prefix = "trans")
@Data
public class MessageTransformProperties {
private List urlList;
}
在yaml文件中的配置如下:
# 报文转换配置
trans:
url-list:
- paths: /jar/api/cockpit
content-type: application/json
fields:
# 新字段:老字段,若新老字段一致,可以只配置新字段
- code:rs
- msg:rsdesp
- data:resultMessage
- paths: /war/api/delivertool