当前位置: 首页 > news >正文

php网站助手如何推广软件

php网站助手,如何推广软件,保定建设银行网站首页,广州一共几个区我们编写RestController时,有可能多个接口使用了相同的RequestBody,在一些场景下需求修改传入的RequestBody的值,如果是每个controller中都去修改,代码会比较繁琐,最好的方式是在一个地方统一修改,比如将he…

我们编写RestController时,有可能多个接口使用了相同的RequestBody,在一些场景下需求修改传入的RequestBody的值,如果是每个controller中都去修改,代码会比较繁琐,最好的方式是在一个地方统一修改,比如将header中的某个值赋值给RequestBody对象的某个属性。 示例项目 https://github.com/qihaiyan/springcamp/tree/master/spring-modify-request-body

一、概述

在spring中可以使用RequestBodyAdviceAdapter修改RestController的请求参数。

二、自定义 RequestBodyAdviceAdapter

以下代码为自定义 ModifyBodyAdvice 实现 RequestBodyAdviceAdapter

@ControllerAdvice
public class ModifyBodyAdvice extends RequestBodyAdviceAdapter {@AutowiredHttpServletRequest httpServletRequest;@Override@NonNullpublic Object afterBodyRead(@NonNull Object body, @NonNull HttpInputMessage inputMessage,@NonNull MethodParameter parameter, @NonNull Type targetType,@NonNull Class<? extends HttpMessageConverter<?>> converterType) {String requestMethod = httpServletRequest.getMethod();String fieldName = "foo";if (StringUtils.startsWithIgnoreCase(requestMethod, HttpMethod.PUT.name())|| StringUtils.startsWithIgnoreCase(requestMethod, HttpMethod.POST.name())) {Field field = ReflectionUtils.findField(body.getClass(), fieldName);if (field != null) {ReflectionUtils.makeAccessible(field);String paramValue = Optional.ofNullable(httpServletRequest.getHeader(fieldName)).orElse("");Method method = ReflectionUtils.findMethod(body.getClass(), "set" +StringUtils.capitalize(fieldName), field.getType());if (method != null) {ReflectionUtils.invokeMethod(method, body, paramValue);}}}return super.afterBodyRead(body, inputMessage, parameter, targetType, converterType);}@Overridepublic boolean supports(@NonNull MethodParameter methodParameter,@NonNull Type targetType,@NonNull Class<? extends HttpMessageConverter<?>> converterType) {return true;}
}

便于演示处理过程,我们在代码中写死了要修改的请求对象的属性为 foo ,从请求header中获取foo这个header的值,然后通过反射赋值到请求对象的foo属性。

三、验证统一修改逻辑

我们通过编写单元测试的方式验证RequestBody的值是否能够正常修改。
在DemoApplicationTest这个单元测试程序中进行接口调用,并验证返回结果。

   @Testpublic void test() {ReqBody reqBody = new ReqBody();ResponseEntity<ReqBody> resp = testRestTemplate.exchange(RequestEntity.post("/test").header("foo", "test").body(reqBody), ReqBody.class);log.info("result : {}", resp);assertThat(resp.getBody().getFoo(), is("test"));}

我们调用controller时传入了的RequestBody为 ReqBody的一个对象,这个对象没有对属性进行赋值,在请求header中发送了foo这个header,按照处理逻辑,controller中接收到的ReqBody对象的foo的值应该是header的值。

http://www.khdw.cn/news/24970.html

相关文章:

  • 云南城市建设职业学院网站班级优化大师的利和弊
  • 网站需要前台后台网络营销的含义特点
  • 网站排名在哪里优化百度搜索风云榜人物
  • 企业网站开发多少钱网络营销分析报告
  • 全国最新网站备案查询游戏广告推广平台
  • 商业网站后缀名百度帐号注册
  • wordpress域名 文件夹怎么做seo关键词优化
  • 简约个人网站模板成都网站seo技巧
  • 30分钟seo网站在线域名解析ip地址
  • 网站如何在公安局备案网站推广优化排名教程
  • 湖北seo网站设计北京计算机培训机构前十名
  • 南通网站优化公司百度账号查询
  • 苏州建设招聘信息网站小程序开发哪家更靠谱
  • 网站开发和运营合同分开签么外链工厂
  • 网站开发 学习百度在线翻译
  • 福州网站运营百度快照官网登录
  • 2019年开公司做网站可以吗新人做外贸怎么找国外客户
  • 哪个网站能在家做兼职凡科建站怎么建网站
  • 做网站应选那个主题网络营销师报名官网
  • 搜索引擎作弊网站有哪些空间刷赞网站推广
  • dw做的网站如何让别人看看数字营销软件
  • 做的网站不能放视频播放器购买域名
  • 1688网站建设方案书模板网络推广免费网站
  • 网站建设的相关书籍百度收录查询代码
  • 青海青海西宁网站建设系统优化的方法
  • 建站公司属于什么类型郭生b如何优化网站
  • 网站开发好学吗网络舆情监控系统
  • bootstrap 网站案例学seo优化
  • 十堰网站建设有哪些公司收录提交入口网址
  • 有没有什么网站专门帮人做问卷外国网站怎么进入