Reputation: 42604
I am using springboot + jersey in my application. And I am using embeded tomcat. Below is the definition of an API.
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
public Response createNewBadge(@FormDataParam("name") String name,
@DefaultValue("0") @FormDataParam("grade") int grade,
@DefaultValue("0") @FormDataParam("point") int point,
@FormDataParam("file") InputStream fileInputStream,
@FormDataParam("file") FormDataContentDisposition disposition) {
...
}
When I launch the application and access the path provided by this API, I will get below error. Did I miss anything here?
WARNING: No injection source found for a parameter of type public javax.ws.rs.core.Response com.ct.api.BadgeAPI.createNewBadge(java.lang.String,int,int,java.io.InputStream,org.glassfish.jersey.media.multipart.FormDataContentDisposition) at index 0.
2016-02-26 13:42:14.457 ERROR 35414 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : StandardWrapper.Throwable
org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization.
[[FATAL] No injection source found for a parameter of type public javax.ws.rs.core.Response com.ct.api.BadgeAPI.createNewBadge(java.lang.String,int,int,java.io.InputStream,org.glassfish.jersey.media.multipart.FormDataContentDisposition) at index 0.; source='ResourceMethod{httpMethod=POST, consumedTypes=[multipart/form-data], producedTypes=[application/json], suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS, invocable=Invocable{handler=ClassBasedMethodHandler{handlerClass=class com.ct.api.BadgeAPI, handlerConstructors=[org.glassfish.jersey.server.model.HandlerConstructor@22393b97]}, definitionMethod=public javax.ws.rs.core.Response com.ct.api.BadgeAPI.createNewBadge(java.lang.String,int,int,java.io.InputStream,org.glassfish.jersey.media.multipart.FormDataContentDisposition), parameters=[Parameter [type=class java.lang.String, source=name, defaultValue=null], Parameter [type=int, source=grade, defaultValue=0], Parameter [type=int, source=point, defaultValue=0], Parameter [type=class java.io.InputStream, source=file, defaultValue=null], Parameter [type=class org.glassfish.jersey.media.multipart.FormDataContentDisposition, source=file, defaultValue=null]], responseType=class javax.ws.rs.core.Response}, nameBindings=[]}']
at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:555) ~[jersey-server-2.22.1.jar:na]
at org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:184) ~[jersey-server-2.22.1.jar:na]
at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:350) ~[jersey-server-2.22.1.jar:na]
at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:347) ~[jersey-server-2.22.1.jar:na]
at org.glassfish.jersey.internal.Errors.process(Errors.java:315) ~[jersey-common-2.22.1.jar:na]
Upvotes: 4
Views: 4844
Reputation: 42604
After some search I figured out the root cause. I need to register MultiPartFeature class on jersey configuration like below:
@Configuration
public class JerseyConfiguration extends ResourceConfig {
public JerseyConfiguration(){
register(MultiPartFeature.class);
}
}
Upvotes: 4
Reputation: 79
With Spring boot, 2.15 version of jersey is supported. Please change the version of multipart jersey dependency.
Upvotes: 2