源java代码

package com.xiaoz.URL.SX;

import com.xiaoz.URL.URL_1;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/users")
public class URL_SX_1 implements URL_1 {
    @GetMapping
    public Object hs1(String name) {
        System.out.println(name);
        return "hello Tomcat 中文测试";
    }
}

解决办法

从你提供的错误信息来看,问题出在Spring MVC处理请求时无法解析方法参数名称。具体错误是:


浅色版本

java.lang.IllegalArgumentException: Name for argument of type [java.lang.String] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag.

这个错误通常发生在Spring需要通过反射获取方法参数的名称,但编译器没有保留这些信息时。要解决这个问题,你需要确保Java编译器使用-parameters标志来保留参数名信息。

解决方案

1. 使用Maven配置

如果你使用的是Maven构建工具,可以在pom.xml中添加以下配置来启用-parameters选项:


xml

浅色版本

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version> <!-- 请使用最新版本 -->
            <configuration>
                <source>17</source> <!-- 根据你的Java版本设置 -->
                <target>17</target> <!-- 根据你的Java版本设置 -->
                <compilerArgs>
                    <arg>-parameters</arg>
                </compilerArgs>
            </configuration>
        </plugin>
    </plugins>
</build>
2. 使用IDE配置

如果你使用的是IDE(如IntelliJ IDEA或Eclipse),也可以在IDE中进行相应的配置:

IntelliJ IDEA
  1. 打开项目设置:File -> Settings(Windows/Linux)或 IntelliJ IDEA -> Preferences(macOS)。
  2. 导航到 Build, Execution, Deployment -> Compiler -> Java Compiler
  3. 在 Additional command line parameters 中添加 -parameters
Eclipse
  1. 右键点击项目,选择 Properties
  2. 导航到 Java Compiler
  3. 勾选 Store information about method parameters (usable via reflection)
3. 代码调整

如果不想改变编译器设置,可以考虑为方法参数添加@RequestParam注解,显式指定参数名称。例如:


java

浅色版本

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/users")
public class URL_SX_1 implements URL_1 {
    @GetMapping
    public Object hs1(@RequestParam("name") String name) {
        System.out.println(name);
        return "hello Tomcat 中文测试";
    }
}

这样Spring MVC可以直接通过注解获取参数名称,而不需要依赖编译器生成的参数名称信息。

总结

你可以选择上述任一方法来解决这个问题。推荐使用Maven配置或IDE配置,因为这是一劳永逸的解决方案,并且适用于整个项目。如果只是临时解决问题,可以考虑修改代码中的方法签名。完成配置后,请清理并重新构建项目,然后重启Tomcat服务器以确保更改生效。

或者直接修改pom文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.xiaoz</groupId>
  <artifactId>TomeCat</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>TomeCat Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
<!--    Servlet-->
    <dependency>
      <groupId>jakarta.servlet</groupId>
      <artifactId>jakarta.servlet-api</artifactId>
      <version>6.0.0</version>
    </dependency>
<!--    spring核心-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>6.1.13</version>
    </dependency>
<!--    mvc-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>6.1.13</version>
    </dependency>
<!--    json库-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.17.2</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.17.2</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.17.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin -->
    <dependency>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.13.0</version>
    </dependency>

  </dependencies>
  <build>
    <finalName>TomeCat</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version> <!-- 请使用最新版本 -->
        <configuration>
          <source>21</source> <!-- 根据你的Java版本设置 -->
          <target>21</target> <!-- 根据你的Java版本设置 -->
          <compilerArgs>
            <arg>-parameters</arg>
          </compilerArgs>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐