参数值[0]与期望类型[java.lang.Integer]不匹配。

9

有一个有趣的问题,我传递了一个int类型的值,但是系统抱怨它不匹配类型:

org.springframework.dao.InvalidDataAccessApiUsageException: 参数值[0]与期望的类型[java.lang.Integer]不匹配

@Procedure(procedureName = "dbo.do_cool_stuff_to_client")
void coolClientStuff(int clientId);

它被称为这样:

public void someOtherMethod(int clientId){
  clientRepository.coolClientStuff(clientId);
}
1个回答

9

事实证明,这里有一些愚蠢/奇怪的问题,它确实希望我输入类类型而不是原始类型。

将方法签名更改为使用 Integer 而不是 int 即可解决问题。

@Procedure(procedureName = "dbo.do_cool_stuff_to_client")
void coolClientStuff(Integer clientId);

阅读了“期望类型 [java.lang.Integer]”后,我会_期望_参数是一个Integer。是否有其他@Procedure情况下,int会被用作Integer的替代?我对这个注释不熟悉。 - CubeJockey
这很奇怪;实际上它不应该有影响,因为自动装箱应该会处理它。也许当Spring在这里使用反射时,它没有考虑使用原始类型而只考虑了包装类型的可能性?它可能正在检查参数的类是否仅为== Integer.class,而没有考虑int.class - Vivin Paliath
是的,异常让我改变了它并且它能正常工作,但这很奇怪,因为我本来期望使用基元类型一直都可以正常。 - Kingpin2k

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接