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