无法在 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());
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());