【问题标题】:Parameter value [1] did not match expected type [java.lang.Integer (n/a)]参数值 [1] 与预期类型不匹配 [java.lang.Integer (n/a)]
【发布时间】:2019-09-03 11:00:12
【问题描述】:

我有实体和休息控制器,当我向我的控制器发出请求时,它会抛出这个异常:

java.lang.IllegalArgumentException:参数值 [1] 与预期类型不匹配 [java.lang.Integer (n/a)]

我的控制器:

@GetMapping("/createCharacter")
public Character createCharacters(@RequestParam("userId") Integer userId, @RequestParam("mapId") long mapId) {
    return createCharactersService.createCharacters(userId, mapId);
}

我的实体有 int 类型 id:

  @Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;

【问题讨论】:

  • 你到底想完成什么?
  • 我尝试将 Integer 更改为 Long 或 String 这有助于解决我的问题,但在这种情况下,我的 Spring Data Rest for user entity 不起作用。
  • 为什么要将Id声明为String,它是uuid吗?实体中的id通常是Long类型,特别是当数据库中的相对id字段是Big Integer时。
  • 是的,它是 UUID。但现在我用原始数字代替了它。

标签: java spring spring-data


【解决方案1】:

在我的情况下,我使用了 DTO,所以

以前我的@query是这样的

@query("SELECT ... WHERE ucs.district = ?1")

然后我这样改了@query

@query("SELECT ... WHERE ucs.district.id = ?1")

【讨论】:

    【解决方案2】:

    例如,如果您将 JPA 与 @Query 一起使用:

     @Query("SELECT r FROM Employee r WHERE r.empId = ?1)
     Employee getMyEmployee(long id);
    

    @Query("SELECT r FROM Employee r WHERE r.empId = :id)
    Employee getMyEmployee(@Param("id") long id);
    

    确保传递的参数是 long 值,empId 也是 long 值。如果执行该方法 classObj.getMyEmployee(someIntVariable) 通过传递 int 值可能会导致上述错误。

    【讨论】:

      【解决方案3】:

      对于那些根据错误发现这个问题的人:

      java.lang.IllegalArgumentException: Parameter value [Type@abdc80fc] did not match expected type [Type (n/a)]
      

      您可能会像这样使用 JPA:

      @Repository
      public interface OtherRepository extends JpaRepository<Other, Long> {
          List<Other> findAllByType(final Type type);
      

      在这种情况下,请使用 Type 的 id(因此:findAllByTypeId)。

      【讨论】:

        【解决方案4】:

        由于 Id 是一个 uuid,因此您必须将其作为字符串保存在实体中。

        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private String id;
        

        因此,您必须在 Service 和 Controller 中将其用作字符串。

        @GetMapping("/createCharacter")
        public Character createCharacters(@RequestParam("userId") String userId, @RequestParam("mapId") long mapId) {
            return createCharactersService.createCharacters(userId, mapId);
        }
        

        【讨论】:

          猜你喜欢
          • 2019-07-23
          • 2015-10-20
          • 2022-11-10
          • 2020-06-22
          • 2019-10-22
          • 1970-01-01
          • 2022-06-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多