首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring如何仅通过形参名称匹配查询参数?

Spring如何仅通过形参名称匹配查询参数?
EN

Stack Overflow用户
提问于 2018-06-03 17:22:54
回答 1查看 947关注 0票数 9

假设我有以下代码片段:

代码语言:javascript
复制
@RequestMapping(method = RequestMethod.GET)
public List<Article> getArticles(@RequestParam int offset,
                                 @RequestParam int limit) {
  ...
}

当参数名没有显式声明为注释参数时,Spring如何将HTTP查询参数与正确的形式参数相匹配?

它假设形参名称总是出现在字节码中吗?

据我所知,情况并不总是如此。只有在以下情况下,才能从字节码中检索形参名称:

a)类文件已使用-parameters javac选项编译

b)类文件已经使用-g (或-g:vars) javac选项进行了编译,该选项添加了调试信息,包括真实的变量名(因为形参被存储为方法的第一个局部变量)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-04 08:27:29

为了找到您问题的答案,我使用maven和以下命令构建了我的Spring REST应用程序:

代码语言:javascript
复制
mvn clean install -X

我的build.log包含以下调试信息:

代码语言:javascript
复制
[DEBUG] Command line options:

... -g -nowarn -target 1.8 -source 1.8 -encoding UTF-8

正如我们所看到的,默认情况下会出现-g调试选项,该选项会生成调试信息,包括本地变量。

为了证明并非如此,我使用以下选项更新了maven-compiler-plugin配置:

代码语言:javascript
复制
-g:none

配置示例:

代码语言:javascript
复制
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.5.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <compilerArgument>-g:none</compilerArgument>
            </configuration>
        </plugin>
    </plugins>
</build>

在那之后,我的web服务开始抛出一个错误:

代码语言:javascript
复制
java.lang.IllegalArgumentException: Name for argument type [java.lang.String] not
available, and parameter name information not found in class file either.

默认情况下,maven-compiler-plugin似乎包含-g选项。这允许Spring在运行时检索参数名称。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50664906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档