简体   繁体   中英

MethodArgumentTypeMismatchException calling a Rest method with curl

I have a basic SpringBoot 2.0.6.RELEASE app. Using Spring Initializer, JPA, embedded Tomcat, Thymeleaf template engine, and package as an executable JAR with a restful architecture

@PutMapping(path = "/users/alarms2", consumes = "application/json", produces = "application/json")
    public void setAlerts2(@RequestHeader(value = "Authorization") String authHeader,
            @RequestBody AlertConfiguration alertConfiguration)

            throws DataAccessException, ClientProtocolException, SQLException, IOException {
..
}

but when I call this method from curl:

curl -X PUT -H "Content-Type: application/json" -H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJyaWNhcmQub2SAsZUBnbWFpbC5jb20iLCJleHAiOjE2MDAxODMzNDAsImlhdCI6MTUzOTcwMzM0MH0.2gbyyGnkcoHjOw7HbUBBQgb59Bw8iAyFbqTe2DPUlOA-V5UwrW3KXWHZlXssZni8oRJ_o1QRzAFtAWMfz7f0Yw" -d ‘{“symbol": “MENU”,  "alarmKey”:”VEGAN” , "enabled": "true"}' "http://95.90.225.68:1133/restos/api/v1/users/alarms2"

I got this error in the server:

2018-10-17 17:16  [http-nio-1133-exec-9] WARN  o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver.resolveException(140) - Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'long'; nested exception is java.lang.NumberFormatException: For input string: "alarms2"]

You probably have another method with a more general signature that overlaps given one. Something like:

@PutMapping(path = "/users/{userId}", ...)
public void someMethod(@PathVariable(value = "userId") Long userId) {
...
}

So when you consume /api/v1/users/alarms2 Spring first tries to convert "alarms2" (which is obviously not a valid Long ) to userId (which is Long )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM