2016-03-22 6 views
8

Es gibt einen REST-API-Endpunkt, der implementiert werden muss, um einige Informationen zu erhalten und eine Backend-Anfrage an einen anderen Server und eine Antwort vom Backend-Server zu senden muss die endgültige Antwort setzen. Mein Problem ist wie Antwortkörper in javax.ws.rs.core.Response einstellen? HierWie response body in javax.ws.rs.core.Response gesetzt wurde

@Path("analytics") 
@GET 
@Produces("application/json") 
public Response getDeviceStats(@QueryParam("deviceType") String deviceType, 
           @QueryParam("deviceIdentifier") String deviceIdentifier, 
           @QueryParam("username") String user, @QueryParam("from") long from, 
           @QueryParam("to") long to) { 

    // Trust own CA and all self-signed certs 
    SSLContext sslcontext = null; 
    try { 
     sslcontext = SSLContexts.custom() 
       .loadTrustMaterial(new File(getClientTrustStoretFilePath()), "password## Heading ##".toCharArray(), 
         new TrustSelfSignedStrategy()) 
       .build(); 
    } catch (NoSuchAlgorithmException e) { 
     log.error(e); 
    } catch (KeyManagementException e) { 
     log.error(e); 
    } catch (KeyStoreException e) { 
     log.error(e); 
    } catch (CertificateException e) { 
     log.error(e); 
    } catch (IOException e) { 
     log.error(e); 
    } 
    SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
      sslcontext, 
      new String[] { "TLSv1" }, 
      null, 
      SSLConnectionSocketFactory.getDefaultHostnameVerifier()); 
    CloseableHttpClient httpclient = HttpClients.custom() 
      .setSSLSocketFactory(sslsf) 
      .build(); 
    HttpResponse response = null; 
    try { 
     HttpGet httpget = new HttpGet(URL); 
     httpget.setHeader("Authorization", "Basic YWRtaW46YWRtaW4="); 
     httpget.addHeader("content-type", "application/json"); 
     response = httpclient.execute(httpget); 
     String message = EntityUtils.toString(response.getEntity(), "UTF-8"); 
    } catch (ClientProtocolException e) { 
     log.error(e); 
    } catch (IOException e) { 
     log.error(e); 
    } 

} 

Nachricht ist diejenige, die ich einstellen müssen. Aber ich habe mehrere Methoden ausprobiert. Hat keiner von ihnen gearbeitet.

+2

'return Response.ok (Nachricht) .build()'? –

Antwort

14

Eine der folgenden Lösungen sollte es tun:

return Response.ok(entity).build(); 
return Response.ok().entity(entity).build(); 

Für weitere Informationen einen Blick auf Response und Response.ResponseBuilder Klassen-Dokumentation.

Tipp: In der Response.ResponseBuilder API Sie einige nützliche Methoden finden könnten, die Sie cache, cookies und headers auf die HTTP-Antwort in Bezug auf zusätzliche Information zu ermöglichen.

+1

Ja. 'return Response.ok (message) .build()' funktioniert für mich. Auch 'return Response.ok(). Entity (message) .build()' hat nicht funktioniert. Wie auch immer danke und akzeptierte Antwort – GPrathap

+0

Response.ok (message) .build() wird eine 200 zurückgeben, können wir etwas mit BAD_REQUESTs genauso machen. Ich möchte eine benutzerdefinierte Nachricht hinzufügen. – prime

+0

@prime 'return Antwort.status (Response.Status.BAD_REQUEST) .entity (entity) .build();' –

Verwandte Themen