代码之家  ›  专栏  ›  技术社区  ›  Cyril Gambis

使用Maven运行Spring boot应用程序时出错:参数绑定的名称不能为null

  •  2
  • Cyril Gambis  · 技术社区  · 6 年前

    使用Spring boot 1.5.12和Java 8的Spring boot应用程序在我的开发环境中执行得非常好,但在部署到测试环境时,我面临着一些困难:

    我使用:mvn spring boot:run启动应用程序,执行停止并出现错误:

    java.lang.IllegalArgumentException: Name for parameter binding must not be null or empty! On JDKs < 8, you need to use @Param for named parameters, on JDK 8 or better, be sure to compile with -parameters.
    

    我做了一些搜索,了解到为了让我的存储库方法正常工作,例如:

    @RepositoryRestResource(collectionResourceRel = "users", path = "users")
    public interface UserRepository extends JpaRepository<User, Long>, UserRepositoryCustom {
    
        @Query("SELECT u FROM User u WHERE u.primaryEmail.emailAddress = :emailAddress "
                + "AND u.deleted = 0")
        Optional<User> findByPrimaryEmailAddress(String emailAddress);
    

    我需要使用“-parameters”选项进行编译,因为我没有将@Param注释放在参数“emailAddress”上。

    它在Eclipse中工作,因为编译器有一个激活的选项,但当我在Eclipse之外使用maven编译应用程序时,必须设置该选项。

    我的问题是 Spring boot documentation ,因为我在pom中使用了默认的spring boot maven插件。xml

        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    

    它应该自动管理这个编译器选项,但似乎没有。

    当我比较spring-boot-starter-parent-1.5.12时。释放pom和 latest version of spring boot 在github上,我无法在1.5.12版本上看到

    <parameters>true</parameters>
    

    你知道我如何解决我的问题吗?

    我将尝试用带“-parameters”编译器参数的maven编译器插件替换spring boot maven插件,但如果可以使用默认的spring boot maven插件,我会更有信心。

    非常感谢。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Cyril Gambis    6 年前

    我认为spring boot maven插件中的“-parameters”选项可能是最近添加的,并且文档对于spring boot 1.5.12是不正确的(可能是针对spring boot 2.0.0)

    我通过配置maven编译器解决了这个问题:

        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
                <compilerArgs>
                    <arg>-parameters</arg>
                </compilerArgs>
            </configuration>
        </plugin>
    

    重要提示:必须设置“-parameters”参数

        2
  •  0
  •   mario    6 年前

    您需要emailAddress的参数,jpql无法理解给定的参数。

    Optional<User> findByPrimaryEmailAddress(@Param("emailAddress") String emailAddress);
    

    试试看!