无法在 Java 中读取或解析来自 CXF REST Web 服务的纯字符串响应

Can't read or parse Plain String Response from CXF REST Web Service in Java

REST 服务在 SpringMVC 中正确实现、部署,并且 returns 正确的结果字符串,

@RestController
public class RESTServiceController {

    @GET
    @Produces("application/json") 
    @RequestMapping("/restUrl")
    public String getResult() {
        JSONObject json = new JSONObject();
        json.put("result", Boolean.TRUE);
    }
}

测试此 Web 服务时我得到了正确的输出,

{"result":true}

问题是调用者通过CXF获取了Response对象,但是不知道如何解析Response。我不需要自定义对象。我只需要直接字符串,我只想查看我的输出字符串。

String restServiceURI = "http://www.asite.com/restUrl";
WebClient client = WebClient.create(restServiceURI,true);
Response resp = client.get();
//String entity = (String)resp.getEntity; <-- Also tried this to cast to a string

问题是,响应长度为 0,状态为 302。 getEntity InputStream 根据调试器显示的内容返回 EmptyInputStream

Response 对象没有任何我可以在调试器中看到的信息。

如何取回我的直接字符串?有例子吗?

您正在尝试混合 Spring 休息和 CxF 休息。使用 Spring Rest 或 CXF Rest。

如果要使用Spring如下图休息

@Service
public class RESTServiceController {

    @RequestMapping("/restUrl")
    public @ResponseBody MyClass getResult() {
        return myClass;
    }
}

或如下所示的 CXF。

@Service
public class RESTServiceController {

    @GET
    @Produces("application/json") 
    public MyClass getResult() {
        return myClass;
    }
}

注意: 你不需要明确地使用 json 转换,Spring Rest 和 CXF 都必须具有将你的对象转换为 json 细绳。

但是,您的问题并不止于此,我相信您已经启用了 spring-security,它正在发送带有登录页面的重定向(302)响应。您可以通过在客户端启用登录来验证来自服务器的响应。

        WebClient.getConfig(client).getInInterceptors().add(new LoggingInInterceptor());
        WebClient.getConfig(client).getOutInterceptors().add(new LoggingOutInterceptor());