【问题标题】:How set Response body in javax.ws.rs.core.Response如何在 javax.ws.rs.core.Response 中设置响应体
【发布时间】:2016-03-22 10:43:19
【问题描述】:

有一个需要实现的 REST API 端点用于获取一些信息并将后端请求发送到另一台服务器,来自后端服务器的响应必须设置为最终响应。我的问题是如何在 javax.ws.rs.core.Response 中设置响应正文?

@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);
    } 

}  

这里 message 是我需要设置的。但是我尝试了几种方法。他们中的任何一个都没有工作。

【问题讨论】:

    标签: java web-services rest jakarta-ee jax-rs


    【解决方案1】:

    以下解决方案之一应该可以解决问题:

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

    有关更多详细信息,请查看 ResponseResponse.ResponseBuilder 类文档。

    提示:在Response.ResponseBuilder API 中,您可能会找到一些有用的方法,这些方法允许您将与cachecookiesheaders 相关的信息添加到HTTP 响应中。 p>

    【讨论】:

    • 是的。 return Response.ok(message).build() 为我工作。 return Response.ok().entity(message).build() 也不起作用。无论如何,谢谢并接受答案
    • Response.ok(message).build() 将返回 200,我们可以对 BAD_REQUEST 做同样的事情吗?我的意思是添加一条自定义消息。
    • @prime return Response.status(Response.Status.BAD_REQUEST).entity(entity).build();
    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 2019-03-07
    • 2022-01-04
    相关资源
    最近更新 更多