自定义返回结果

说明

  • 本文介绍基于 Apache ShenYu 网关返回自定义的数据格式。
  • 网关需要统一的返回格式,如果需要自己定义格式,可以进行扩展。

默认实现

  • 默认的实现为 org.apache.shenyu.plugin.api.result.DefaultShenyuResult

  • 返回的数据格式如下:

  1. public class DefaultShenyuEntity implements Serializable {
  2. private static final long serialVersionUID = -2792556188993845048L;
  3. private Integer code;
  4. private String message;
  5. private Object data;
  6. }
  • 返回的 json 格式如下:
  1. {
  2. "code": -100, //返回码,
  3. "message": "您的参数错误,请检查相关文档!", //提示字段
  4. "data": null // 具体的数据
  5. }

扩展

  • 新增一个类 CustomShenyuResult 实现 org.apache.shenyu.plugin.api.result.ShenyuResult
  1. /**
  2. * The interface shenyu result.
  3. */
  4. public interface ShenyuResult<T> {
  5. /**
  6. * The response result.
  7. *
  8. * @param exchange the exchange
  9. * @param formatted the formatted object
  10. * @return the result object
  11. */
  12. default Object result(ServerWebExchange exchange, Object formatted) {
  13. return formatted;
  14. }
  15. /**
  16. * format the origin, default is json format.
  17. *
  18. * @param exchange the exchange
  19. * @param origin the origin
  20. * @return format origin
  21. */
  22. default Object format(ServerWebExchange exchange, Object origin) {
  23. // basic data
  24. if (ObjectTypeUtils.isBasicType(origin)) {
  25. return origin;
  26. }
  27. // error result or rpc origin result.
  28. return JsonUtils.toJson(origin);
  29. }
  30. /**
  31. * the response context type, default is application/json.
  32. *
  33. * @param exchange the exchange
  34. * @param formatted the formatted data that is origin data or byte[] convert string
  35. * @return the context type
  36. */
  37. default MediaType contentType(ServerWebExchange exchange, Object formatted) {
  38. return MediaType.APPLICATION_JSON;
  39. }
  40. /**
  41. * Error t.
  42. *
  43. * @param code the code
  44. * @param message the message
  45. * @param object the object
  46. * @return the t
  47. */
  48. T error(int code, String message, Object object);
  49. }

处理顺序:format->contextType->resultformat方法进行数据的格式化,若数据为基本类型返回自身,其他类型转换为JSON,参数origin为原始数据,可根据情况执行格式化处理。contextType,若是基本类型,使用text/plain,默认为application/json,参数formattedformat方法处理之后的数据,可结合format的返回结果进行数据类型的自定义处理。result的参数formattedformat方法处理之后的数据,默认返回自身,可结合format的返回结果进行数据类型的自定义处理。

  • 其中泛型 T 为自定义的数据格式,返回它就好。

  • 把你新增的实现类注册成为Springbean,如下:

  1. @Bean
  2. public ShenyuResult<?> customShenyuResult() {
  3. return new CustomShenyuResult();
  4. }