HttpMessageCovnert请求信息统一转换

/**
 * 请求信息统一转换处理
 *
 * @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);
}
}

 

posted @ 2024-02-18 16:55  xiaoBai1001  阅读(9)  评论(0编辑  收藏  举报