/**
* 请求信息统一转换处理
*
* @author weiye.li
*/
public class MallMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter {
/**
* 需要转换请求的路径 ,yml 文件配置- @Bean 中new MallMappingJackson2HttpMessageConverter(path) 将其传入
*/
private String apiMallPath;
public MallMappingJackson2HttpMessageConverter(String apiMallPath) {
this.apiMallPath = apiMallPath;
}
@Override
public Object read(Type type, Class<?> contextClass, HttpInputMessage inputMessage) throws HttpMessageNotReadableException, IOException {
//判断是否需要转换
if (!this.isMatch()) {
return super.read(type, contextClass, inputMessage);
}
//转换请求
OsRequest osRequest = JSONUtil.toBean(StrUtil.str(IoUtil.readBytes(inputMessage.getBody()), StandardCharsets.UTF_8), OsRequest.class);
if (osRequest == null || osRequest.getSign() == null) {
throw new ValidateException("无效请求参数,非开放平台下发json结构");
}
// 将原始信息取出 部分如需要处理的 json 字符串 进行向下传递到 controller中
return this.objectMapper.readValue(osRequest.getMessage(), getJavaType(type, contextClass));
}
/**
* 对输出信息进行转换,转换成统一对外输出对象
* @param object
* @param type
* @param outputMessage
* @throws IOException
* @throws HttpMessageNotWritableException
*/
@Override
protected void writeInternal(Object object, Type type, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
//进入全局异常或者url不匹配, 则不转换
if (object instanceof OsResponse || !this.isMatch()) {
super.writeInternal(object, type, outputMessage);
return;
}
super.writeInternal(OsResponse.success(object), OsResponse.class, outputMessage);
}
}