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

已备案网站域名网站底部菜单

已备案网站域名,网站底部菜单,厦门找一家做网站的公司,泉做网站的公司我们编写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.15wanjia.com/news/176665.html

相关文章:

  • 重庆网站设计建设网站引导页面设计
  • asp网站数据库扫描中卫网站推广优化公司
  • 网站标题的选择网站使用arial字体下载
  • 大庆网站开发制作手机营销网站制作
  • 新网站建设信息帮我注册一个账号
  • 昆明门户网站归客手游代理平台
  • 长沙建站公司做网站58黄页
  • 孟州网站建设建设局是干什么的
  • python做网站多么网站制作过程简介
  • 做视频网站视频文件都存放在哪里如何制作简单软件
  • 公司注册网站及流程python 网站开发 环境
  • 用dw建设个人网站视频学校网站模板
  • 网站添加文章个人做seo怎么赚钱
  • 做网站的公司重庆网上推广平台有哪些
  • 成都网站快速开发深圳专业网站公司
  • 网站做seo需要哪些准备校园信息网站开发与设计
  • 深圳建设网站的公司网页设计与网站规划
  • 主题资源网站创建时 如何突出设计的特点做个网站大概多少钱
  • 广安市建设局网站教育学校网站建设
  • 成都 网站建设 公司免费速建网站
  • 专做it招聘的网站网站所有页面
  • 购物网站建设开题报告什么是网络口碑营销
  • 网站开发私活分成西安软件公司排名
  • 做销售的网站龙华响应式网站建设
  • 盘锦949公社官方网站哪个网站跨境电商做的最好
  • 网站建设与管理书今天的新闻 最新消息摘抄
  • 阿里云虚拟主机可以做几个网站编程哪个机构学比较好
  • 东莞企业网站制重庆高端网站seo
  • wordpress搭建付费网站怎么介绍自己的网页
  • 网站侧导航精美ppt模板