当前位置: 首页 > 编程笔记 >

Spring Boot接收单个String入参的解决方法

宋典
2023-03-14
本文向大家介绍Spring Boot接收单个String入参的解决方法,包括了Spring Boot接收单个String入参的解决方法的使用技巧和注意事项,需要的朋友参考一下

前言

接受参数是我们在日常开发中经常会遇到的一个需求,下面这篇文章主要给大家介绍了关于Spring Boot接收单个String入参之解决方案的相关内容,下面话不多说了,来一起看看详细的介绍吧

场景:

在做接口时,有的时候,接口入参只需要一个参数,如果将一个参数封装成一个对象很麻烦,故有了以下方式:

思路:

spring自带的参数解析器貌似是不具备这个能力的,所有自定义

方式方法:

1.定义一个注解

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestSingleParam {
 String value();

 boolean required() default true;

 String defaultValue() default "";
}

2.定义解析器

public class RequestSingleParamHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
 @Override
 public boolean supportsParameter(MethodParameter parameter) {
  return parameter.hasParameterAnnotation(RequestSingleParam.class);
 }


 @Override
 public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
         NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
  RequestSingleParam requestSingleParam = parameter.getParameterAnnotation(RequestSingleParam.class);
  HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
  BufferedReader reader = request.getReader();
  StringBuilder sb = new StringBuilder();
  char[] buf = new char[1024];
  int rd;
  while ((rd = reader.read(buf)) != -1) {
   sb.append(buf, 0, rd);
  }
  JSONObject jsonObject = JSONObject.parseObject(sb.toString());
  String value = requestSingleParam.value();
  return jsonObject.get(value);
 }

}

3.修改Springboot启动类

(a.继承WebMvcConfigurerAdapter;b.重写addArgumentResolvers()方法)

@SpringBootApplication
@EnableWebMvc
public class SpringbootDemoApplication extends WebMvcConfigurerAdapter {

 public static void main(String[] args) {
  SpringApplication.run(SpringbootDemoApplication.class, args);
 }

 @Override
 public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers){
  argumentResolvers.add(new RequestSingleParamHandlerMethodArgumentResolver());
  super.addArgumentResolvers(argumentResolvers);
 }
}

4.在Controller中应用 

调用接口方,传参如: {“name”:"张三"},Controller中就能获取到"张三”

 @RequestMapping(value = "/test",method = RequestMethod.POST)
 public void test(@RequestSingleParam(value = "name") String name){
   System.out.println(name);
 }

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对小牛知识库的支持。

 类似资料:
  • 本文向大家介绍SpringBoot请求参数接收方式,包括了SpringBoot请求参数接收方式的使用技巧和注意事项,需要的朋友参考一下 application/json接收 x-www-form-urlencoded、?拼接、form-data接收 UserDto 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 我想创建一个按键对HashMap进行排序的方法。HashMap的键可以是String或Long。这两种HashMap类型的处理是相似的。为了避免代码重复,我想创建一个方法来处理这两种情况。 该方法的代码: 是否可以创建一个具有单个参数的Java方法,该方法可以接收两个<code>HashMap的值

  • 本文向大家介绍解决springboot无法注入JpaRepository的问题,包括了解决springboot无法注入JpaRepository的问题的使用技巧和注意事项,需要的朋友参考一下 使用内置服务器启动springboot项目时,会从@SpringBootApplication修饰类所在的包开始,加载当前包和所有子包下的类,将由@Component @Repository @Service

  • 本文向大家介绍个人小程序接入支付解决方案,包括了个人小程序接入支付解决方案的使用技巧和注意事项,需要的朋友参考一下 现状 现在如果产品要接入支付,支付宝和微信都规定必须公司才能申请,对个人而言就没办法了。 注册和维护一个公司的成本很高,还涉及到财务会计、纳税等,最后如果不需要了注销公司也会很麻烦。 这对于刚起步的产品,或者个人开发者而言成本都很高。 解决方案 那个人还有办法签约微信和支付宝的原生支

  • 本文向大家介绍vue-socket.io接收不到数据问题的解决方法,包括了vue-socket.io接收不到数据问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 最近公司的一个vue项目用到了vue-socket.io来处理socket数据传输,之前用过socket.io-client,现在知道vue-socket.io是基于socket.io-client的一层封装,将socket挂于全局

  • 本文向大家介绍解决springboot 连接 mysql 时报错 using password: NO的方案,包括了解决springboot 连接 mysql 时报错 using password: NO的方案的使用技巧和注意事项,需要的朋友参考一下 最近使用 springboot 配置 mysql 时出现了一个错误 Access denied for user ''@'localhost' (u