- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 Spring 中,如果我没记错的话,以下两个语句是相同的:
@RequestParam("type") String type
@RequestParam String type
spring如何知道'type'的变量名(第二版)。我的印象是该信息已从类文件中删除,除非使用-g 标志(包括调试信息)。
最佳答案
这个的简短版本是显然正在编译参数名称,如果没有,您会得到一个异常,表明 Spring MVC 无法推断出参数名称。也就是说,参数名称并不总是存储在字节码中,但似乎如果它们是,Spring 会找到它们,如果不是,则需要在添加 @RequestParam
注释时指定它们。
有关此 similar question 的其他详细信息它是 answers .
在3.0.5.RELEASE中,这些注解在HandlerMethodInvoker.resolveHandlerArguments中处理并且似乎如果没有提供任何值,Spring 将使用 RequestParam.value()
。这可以返回空字符串。
再往下,Spring 使用HandlerMethodInvoker.resolveRequestParam
, 并且在那里,如果参数名称为空,它调用 HandlerMethodINvoker.getRequiredParameterName
以 MethodParameter methodParam
作为参数:
718 private String getRequiredParameterName(MethodParameter methodParam) {
719 String name = methodParam.getParameterName();
720 if (name == null) {
721 throw new IllegalStateException(
722 "No parameter name specified for argument of type [" + methodParam.getParameterType().getName() +
723 "], and no parameter name information found in class file either.");
724 }
725 return name;
726 }
请注意,这里它试图从 methodParam
中提取信息,如果我们备份树,我们会看到 resolveHandlerArguments
实际上创建了一个新的 MethodParameter
对于它处理的每个参数。在 MethodParameter
中,我们可以看一下 getParameterName()
:
276 public String getParameterName() {
277 if (this.parameterNameDiscoverer != null) {
278 String[] parameterNames = (this.method != null ?
279 this.parameterNameDiscoverer.getParameterNames(this.method) :
280 this.parameterNameDiscoverer.getParameterNames(this.constructor));
281 if (parameterNames != null) {
282 this.parameterName = parameterNames[this.parameterIndex];
283 }
284 this.parameterNameDiscoverer = null;
285 }
286 return this.parameterName;
287 }
所以这使用了一个叫做 ParameterNameDiscoverer
的东西,但这是一个接口(interface),我的跟踪没有显示它使用的是哪个实现,有一个 few .看着LocalVariableTableParameterNameDiscoverer.getParameterNames我们最终调用了 LocalVariableTableParameterNameDiscoverer.ParameterNameDiscoveringVisitor
作为 org.objectweb.asm.ClassReader
的一部分,据我所知,它试图从字节码中读取参数名称。
关于java - Springs @RequestParam 注解的内部工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6891539/
所以我目前正在使用 Spring 构建一个 Multipart-Fileupload。我想创建尽可能通用的 Controller ,以便为我自己的模块化 Controller 应用程序提供良好的开端。
@RequestParam参数丢失 改动过一版代码之后, 发现@RequestParam注解的参数经常丢失. 首先确认前端确实把参数传过来了,用curl直接请求接口, 发现有时候会出现参数丢失,
概述 在这个快速教程中,我们将探索 Spring 的 @RequestParam 注解。 简单地说,我们可以使用 @RequestParam 从请求中提取查询参数、表单参数甚至文件。我们将讨论如何使用
我的@Restcontroller 中有以下方法: @GetMapping public List getByParameterOrAll( @RequestParam(value =
大家好!我有一个关于在 @RestController 中使用 @RequestParam 的问题。我想知道如何从客户端获取@RequestParam。服务器代码(@RestController):
我正在阅读 documentation Spring MVC 中的 @RequestParam 注释。 名称和值属性有什么区别? 文档说: value : Alias for name(). name
我正在尝试在我的 javascript 中获取一个 Java 对象。我正在使用 ajax 请求来获取该对象。这是我的代码: @RequestMapping(path = "/sendSMS", met
这是我在 stackoverflow 上提出的第一个问题,所以请温柔点:) 现有 GET 端点可转换为 POST。它需要扩展以接受包含 JSON 编码数据的查询参数 filterKeys。这种方法不是
假设我在 Spring Boot Controller 中有一个 GET 端点,它接受一个对象作为 @RequestParam @GetMapping(value = "/foos") public
我刚刚发现,即使我省略了 @RequestParam organization 上的注释参数,Spring仍然能够绑定(bind)它。 @RequestMapping(value="", 方法 = R
我有我的 RequestParam,我需要验证它,但是 mu 自定义验证不适用,我的 Controller @RestController @Validated class ExchangeContr
我正在 Spring 中构建一个 API,我有一个简单的问题: 我想在对下面的这些参数执行一些逻辑之前检查它们是否包含值。 我是 Spring 新手 - 有没有办法将这些值“获取”到某种数据结构中,以
我正在使用 Spring MVC 框架做一个 REST 服务。 我有一个方法: @RequestMapping("/rest/{tableName}", method = RequestMethod.
我有一个 Get 端点,它接受一个查询字符串作为请求参数。端点的问题是请求参数字符串可以包含像 ?,/等导致问题的字符。有什么方法可以将包含 ?,/等的字符串映射到 rest Controller 中
有没有办法在不检查每个函数的情况下使用 spring 验证请求参数?例如, Controller 中的每个方法都会生成元素列表,并且每个方法都接受“from”和“to”参数,因此验证是: from >
SpringMvc 中@RequestParam注解使用 建议使用包装类型来代替基本数据类型 ?
@RequestParam 绑定List参数 今天遇到了一个问题 比较尴尬。我写了一个接口,参数用@RequestParam接收,是一个List<String>。用postman可以
目录 基于name和value属性的区别 RequestParam内部有4个参数 @RequestParam,参数是否必须传的问题
1、源码展示 ? 1
配置全局乱码过滤器 参数绑定注解@RequestParam 注解@RequestParam的参数使用说明 获得Restful风格的参数 自定义类型转换器 自定义转换器的开发步骤: 获得Servlet相
我是一名优秀的程序员,十分优秀!