[Fixed] Error "Name for argument of type [java.util.UUID] not specified, and parameter name information not found in class file either"with spring 3 – Java

by
Ali Hasan
java java-21 spring spring-boot

Quick Fix: Use either the -g:vars or the newer -parameters option when compiling your Java code to ensure that method parameter names are included in the class files. This will resolve the error related to missing parameter names.

The Problem:

After upgrading Spring Boot version along with Java version there were runtime errors observed. The problem occurred when trying to call REST APIs. It resulted in errors like ‘Name for argument of type [java.util.UUID] not specified, and parameter name information not found in class file either.’.

The Solutions:

Solution 1: Use `-parameters` option in the compiler

The root cause of the error is that the compiled class files do not contain the names of the method parameters. This can happen if the compiler is not instructed to include this information. To fix this, add the -parameters option to the compiler invocation.

In Maven, this can be done by adding the following configuration to the maven-compiler-plugin:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.10.1</version>
  <configuration>
    <compilerArgs>
      <arg>-parameters</arg>
    </compilerArgs>
  </configuration>
</plugin>

In Gradle, the following configuration can be added to the compileJava task:

compileJava {
  options.compilerArgs = ['-parameters']
}

After making this change, rebuild the project and the errors should be resolved.

Additional tips:

  • Make sure that the version of the Java compiler used to compile the code is compatible with the version of the Java Virtual Machine (JVM) that will be running the code.
  • If you are using an IDE, check its settings to make sure that it is configured to generate class files with parameter names.
  • In case of maven compile plugin confirm if the <release> is set to 21.

Solution 2: Use Maven Compiler Plugin to Enable Parameter Names

To resolve the “Name for argument of type [java.util.UUID] not specified, and parameter name information not found in class file either” error in Spring 3.2 with Java 21, you can use the Maven compiler plugin to enable parameter names in the compiled code. Here’s an updated version of your Maven compile plugin configuration with the necessary changes:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.11.0</version>
    <configuration>
        <parameters>
            true
        </parameters>
    </configuration>
</plugin>

In this updated configuration, we have added the Maven compiler plugin with version 3.11.0. The key change is the addition of the true configuration within the section. This instructs the compiler to generate parameter names in the compiled code, which is necessary to avoid the error you are encountering.

By using this updated Maven compiler plugin configuration, the compiler will now generate parameter names in the compiled code, which will be included in the class files. This will allow Spring to correctly identify the parameter names and resolve the error.

Video Explanation:

The following video, titled "Fixed Error - Waiting For Time - YouTube", provides additional insights and in-depth exploration related to the topics discussed in this post.

Play video

Streaming & Purchase: https://bfan.link/waiting-for-time.