1313import org .slf4j .LoggerFactory ;
1414import org .springframework .beans .factory .annotation .Autowired ;
1515import org .springframework .http .MediaType ;
16+ import org .springframework .web .bind .annotation .CrossOrigin ;
1617import org .springframework .web .bind .annotation .RequestBody ;
1718import org .springframework .web .bind .annotation .RequestMapping ;
1819import org .springframework .web .bind .annotation .RequestMethod ;
2324import java .io .IOException ;
2425import java .io .PrintWriter ;
2526import java .util .LinkedHashMap ;
26- import java .util .List ;
2727import java .util .Map ;
2828
2929@ RestController
@@ -43,6 +43,7 @@ public class GraphQLController {
4343
4444 @ RequestMapping (value = "/graphql" , method = RequestMethod .POST , produces = MediaType .APPLICATION_JSON_VALUE )
4545 @ ResponseBody
46+ @ CrossOrigin
4647 public void graphql (@ RequestBody Map <String , Object > body , HttpServletResponse httpServletResponse ) throws IOException {
4748 String query = (String ) body .get ("query" );
4849 if (query == null ) {
@@ -72,6 +73,7 @@ private void sendNormalResponse(HttpServletResponse httpServletResponse, Executi
7273 httpServletResponse .setStatus (HttpServletResponse .SC_OK );
7374 httpServletResponse .setCharacterEncoding ("UTF-8" );
7475 httpServletResponse .setContentType ("application/json" );
76+ httpServletResponse .setHeader ("Access-Control-Allow-Origin" , "*" );
7577 String body = objectMapper .writeValueAsString (result );
7678 PrintWriter writer = httpServletResponse .getWriter ();
7779 writer .write (body );
@@ -83,13 +85,16 @@ private void sendDeferResponse(HttpServletResponse httpServletResponse, Executio
8385 httpServletResponse .setStatus (HttpServletResponse .SC_OK );
8486 httpServletResponse .setCharacterEncoding ("UTF-8" );
8587 httpServletResponse .setContentType ("multipart/mixed; boundary=\" -\" " );
88+ httpServletResponse .setHeader ("Access-Control-Allow-Origin" , "*" );
8689 httpServletResponse .setHeader ("Transfer-Encoding" , "chunked" );
90+ httpServletResponse .setHeader ("Connection" , "keep-alive" );
8791 PrintWriter writer = httpServletResponse .getWriter ();
8892
89- writer .write ( "---" + CRLF );
93+ writer .append ( CRLF ). append ( "---" ). append ( CRLF );
9094 DeferPart deferPart = new DeferPart (executionResult .toSpecification ());
9195 String body = deferPart .write ();
9296 writer .write (body );
97+ writer .append (CRLF ).append ("---" ).append (CRLF );
9398 httpServletResponse .flushBuffer ();
9499
95100 deferredResults .subscribe (new Subscriber <DeferredExecutionResult >() {
@@ -104,15 +109,16 @@ public void onSubscribe(Subscription s) {
104109
105110 @ Override
106111 public void onNext (DeferredExecutionResult executionResult ) {
107- DeferPart deferPart = new DeferPart (executionResult .toSpecification ());
108- String body = deferPart .write ();
109- writer .write (body );
110112 try {
113+ DeferPart deferPart = new DeferPart (executionResult .toSpecification ());
114+ String body = deferPart .write ();
115+ writer .write (body );
116+ writer .append (CRLF ).append ("-----" ).append (CRLF );
111117 httpServletResponse .flushBuffer ();
112- } catch (IOException e ) {
118+ subscription .request (10 );
119+ } catch (Exception e ) {
113120 e .printStackTrace ();
114121 }
115- subscription .request (10 );
116122 }
117123
118124 @ Override
@@ -142,9 +148,8 @@ public String write() {
142148 StringBuilder result = new StringBuilder ();
143149 String bodyString = bodyToString ();
144150 result .append ("Content-Type: application/json" ).append (CRLF );
145- result .append ("Content-Length: " ).append (bodyString .length ()).append (CRLF );
151+ result .append ("Content-Length: " ).append (bodyString .length () + 2 ). append ( CRLF ).append (CRLF );
146152 result .append (bodyString ).append (CRLF );
147- result .append (CRLF ).append ("---" ).append (CRLF );
148153 return result .toString ();
149154 }
150155
0 commit comments