Spring Data JPA抛出MethodArgumentTypeMismatchException:字符串无法转整数
解决Spring REST API中搜索接口的MethodArgumentTypeMismatchException问题
问题根源
你的路由定义出现了顺序冲突:按ID查询的接口(比如@GetMapping("/films/{id}"))会匹配所有/films/xxx格式的请求,当你访问/films/search时,Spring会把search当成Integer类型的路径变量id,直接触发类型转换异常。
解决方法
方法1:调整接口定义顺序
Spring MVC按接口定义的先后顺序匹配路由,把搜索接口放在按ID查询接口的前面,让Spring优先匹配搜索路径:
// 先定义搜索接口 @GetMapping("/films/search") public List<Film> searchFilms( @RequestParam(required = false) String title, @RequestParam(required = false) Integer voteCount, @RequestParam(required = false) Integer starRating, @RequestParam(required = false) LocalDate releaseDate ) { // 实现你的搜索逻辑 } // 再定义按ID查询接口 @GetMapping("/films/{id}") public Film getFilmById(@PathVariable Integer id) { // 实现单影片查询逻辑 }
方法2:修改搜索接口路径
给搜索接口换个不会和ID查询路径冲突的地址,比如:
@GetMapping("/search/films") public List<Film> searchFilms(/* 请求参数 */) { // 搜索逻辑 }
之后调用http://localhost:8080/search/films?title=Test即可正常访问。
方法3:给ID路径变量加正则约束
在按ID查询的路径变量上添加正则表达式,限定只能匹配数字,这样search这类非数字字符串就不会被误匹配:
@GetMapping("/films/{id:\\d+}") public Film getFilmById(@PathVariable Integer id) { // 单影片查询逻辑 }
验证
修改完成后重启服务,重新调用搜索接口,应该可以正常执行搜索逻辑,不会再抛出MethodArgumentTypeMismatchException。
内容的提问来源于stack exchange,提问作者LenaHm
相关产品推荐
相关产品推荐

