java - jax-rs 返回字符串

标签 java web-services jax-rs

我正在编写一个 jax-rs web 服务,我想通过 java 程序联系它。我定义了一个 @POST 方法,它接收字符串数组作为输入,并应该返回一个 boolean 值。

但实际上,我如何在 java 中访问这个返回值?我已经在网上搜索了几个小时了,每个人都编写返回字符串或其他内容的示例方法,但没有人展示如何从另一个 java 程序访问返回值。

以下是联系 @POST 方法的程序的代码:

ObjectOutputStream oos = null;
        String[] login = {"XXXXXX","XXXXXXX"};
        try {
            login[1] = PasswordGenerator.hashPassword(login[1]);
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        URL url = new URL("XXXXX/XXXXXXX/XXXXXX/users/login/1");
        try {
            // creates a HTTP connection
            HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
            httpConn.setUseCaches(false);
            httpConn.setDoOutput(true);
            httpConn.setRequestMethod("POST");
            httpConn.setRequestProperty("Boolean", "application/xml");
            OutputStream outputStream = httpConn.getOutputStream();
            oos = new ObjectOutputStream(outputStream);
            outputStream.close();

            System.out.println();
            } finally {
            if (oos != null) {
                oos.close();
            }
        }
    }

我想知道的是:关闭我的outputStream后会发生什么?我的意思是,我启动了 POST 方法,但它应该返回一个 boolean 值。这个值在哪里?我怎样才能访问它???

最佳答案

JAX-RS 2.0 有一个客户端 API,它为您提供流畅的 API 来检索响应的内容:

Client client = ClientBuilder.newClient();
    Boolean result = client.target("http://localhost:8080/xxx/")
            .path("user/login/1")
            .request(MediaType.TEXT_PLAIN_TYPE)
            .post(Entity.entity(login, MediaType.APPLICATION_XML) , Boolean.class);

但不幸的是,您需要一个自定义 MessageBodyWriter 将 String[] 转换为 XML 文档。也许您应该更改服务器端方法(和客户端)来操作 DTO - 具有 2 个字段的 POJO,用户名密码 - 并用 @XmlRootElement 进行注释

类似的东西:

(客户端)

Credentials credentials = new 
credentials.setUsername("foo");
credentials.setUsername("hashedPwd");
Client client = ClientBuilder.newClient();
Boolean result = client.target("http://xxxxx")
            .path("/user/login/1")
            .request(MediaType.TEXT_PLAIN_TYPE)
            .post(Entity.entity(credentials, MediaType.APPLICATION_XML) , Boolean.class);
    System.out.println("Result: " + result);

(服务器端)

@Path("/login/{id}")
@POST
public Boolean test(@PathParam("id") String login, Credentials credentials) {
...
}

关于java - jax-rs 返回字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22812783/

相关文章:

.net - 确保 Web 服务安全

grails - Grails JAX-RS调用src/groovy中的类给出错误-消息:无方法签名:适用于参数类型

java try-catch-finally 递归问题

java - 检查字符串是否代表Java中的整数的最佳方法是什么?

java - 在Eclipse中创建一个Maven项目提示 "Could not resolve archetype"

java - 使用全屏按钮在下一个 Activity 中播放视频

javascript - 如何在jquery html应用程序中使用wcf服务作为远程或本地?

c# - 无法在 iis 上托管 ASMX Web 服务

spring-boot - Kotlin 使用存储库进行测试(spring-boot、kotlin、jersey、jax-rs)

java - 为什么在使用带@Provider 注解的 Spring 时仍然需要 resteasy.providers?