29
29
import javax .servlet .http .HttpServletRequest ;
30
30
import javax .servlet .http .Part ;
31
31
32
+ import com .fasterxml .jackson .databind .ObjectMapper ;
32
33
import org .apache .commons .logging .Log ;
33
34
import org .apache .commons .logging .LogFactory ;
34
35
import org .springframework .graphql .server .support .MultipartVariableMapper ;
35
- import org .springframework .http .HttpHeaders ;
36
- import org .springframework .http .converter .json .AbstractJackson2HttpMessageConverter ;
37
- import org .springframework .http .converter .json .MappingJackson2HttpMessageConverter ;
38
- import org .springframework .http .converter .json .MappingJacksonInputMessage ;
39
36
import org .springframework .web .multipart .MultipartFile ;
40
37
import org .springframework .web .multipart .MultipartHttpServletRequest ;
41
38
import reactor .core .publisher .Mono ;
@@ -79,7 +76,7 @@ public class GraphQlHttpHandler {
79
76
80
77
private final WebGraphQlHandler graphQlHandler ;
81
78
82
- private final AbstractJackson2HttpMessageConverter messageConverter ;
79
+ private final PartReader partReader ;
83
80
84
81
/**
85
82
* Create a new instance.
@@ -88,14 +85,14 @@ public class GraphQlHttpHandler {
88
85
public GraphQlHttpHandler (WebGraphQlHandler graphQlHandler ) {
89
86
Assert .notNull (graphQlHandler , "WebGraphQlHandler is required" );
90
87
this .graphQlHandler = graphQlHandler ;
91
- this .messageConverter = new MappingJackson2HttpMessageConverter ( );
88
+ this .partReader = new JacksonPartReader ( new ObjectMapper () );
92
89
}
93
90
94
- public GraphQlHttpHandler (WebGraphQlHandler graphQlHandler , AbstractJackson2HttpMessageConverter messageConverter ) {
91
+ public GraphQlHttpHandler (WebGraphQlHandler graphQlHandler , PartReader partReader ) {
95
92
Assert .notNull (graphQlHandler , "WebGraphQlHandler is required" );
96
- Assert .notNull (messageConverter , "PartConverter is required" );
93
+ Assert .notNull (partReader , "PartConverter is required" );
97
94
this .graphQlHandler = graphQlHandler ;
98
- this .messageConverter = messageConverter ;
95
+ this .partReader = partReader ;
99
96
}
100
97
101
98
/**
@@ -141,7 +138,7 @@ public ServerResponse handleMultipartRequest(ServerRequest serverRequest) throws
141
138
final Map <String , Object > queryVariables = getFromMapOrEmpty (inputQuery , "variables" );
142
139
final Map <String , Object > extensions = getFromMapOrEmpty (inputQuery , "extensions" );
143
140
144
- Map <String , MultipartFile > fileParams = getMultipartFiles (httpServletRequest );
141
+ Map <String , MultipartFile > fileParams = readMultipartFiles (httpServletRequest );
145
142
146
143
Map <String , List <String >> fileMappings = Optional .ofNullable (this .<Map <String , List <String >>>deserializePart (
147
144
httpServletRequest ,
@@ -198,9 +195,7 @@ private <T> T deserializePart(HttpServletRequest httpServletRequest, String name
198
195
return null ;
199
196
}
200
197
try (InputStream inputStream = part .getInputStream ()) {
201
- return (T ) messageConverter .read (
202
- type , null , new MappingJacksonInputMessage (inputStream , new HttpHeaders ())
203
- );
198
+ return partReader .readPart (inputStream , type );
204
199
} catch (IOException e ) {
205
200
throw new RuntimeException (e );
206
201
}
@@ -217,7 +212,7 @@ private Map<String, Object> getFromMapOrEmpty(Map<String, Object> input, String
217
212
}
218
213
}
219
214
220
- private Map <String , MultipartFile > getMultipartFiles (HttpServletRequest httpServletRequest ) {
215
+ private static Map <String , MultipartFile > readMultipartFiles (HttpServletRequest httpServletRequest ) {
221
216
Assert .isInstanceOf (MultipartHttpServletRequest .class , httpServletRequest ,
222
217
"Request should be of type MultipartHttpServletRequest" );
223
218
MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest ) httpServletRequest ;
0 commit comments