Apache CXF - 以客户为中心的以http为中心的方法和PUT

时间:2012-04-02 12:37:33

标签: java http jax-ws cxf jax-rs

我使用Apache CXF提供与RESTful API的通信。

我需要使用PUT方法通过API将一些受约束的实体发送到数据库。

这是提供此方法的正确方法吗?

我问,因为我收到了HTTP 500错误代码响应。

我只能在Apache CXF官方文档中找到GET方法示例;缺少HTTP PUT,HTTP POST等。

WebClient client = 
         WebClient.create("http://MY_SERVER:9090/admission/services/processing");
Admission a = new Admission();
a.setCode("73935282");
:
:

Response r = client.path("/admission").put(a);
// Here I would like to get 201, but there is 500 :(
System.out.println("response: " + r.getStatus()); 

1 个答案:

答案 0 :(得分:2)

该服务是否期望XML之外的内容类型,如JSON? WebClient的默认行为是假设content-typeapplication/xml

以下是相关的source code for WebClient.java

protected Response doInvoke(String httpMethod, Object body, Class<?> responseClass, Type genericType) {

    MultivaluedMap<String, String> headers = getHeaders();
    if (body != null) {
        if (headers.getFirst(HttpHeaders.CONTENT_TYPE) == null) {
            headers.putSingle(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_XML_TYPE.toString());
        }
    } else {
        headers.putSingle(HttpHeaders.CONTENT_TYPE, MediaType.WILDCARD);
    }
    if (responseClass != null && headers.getFirst(HttpHeaders.ACCEPT) == null) {
        headers.putSingle(HttpHeaders.ACCEPT, MediaType.APPLICATION_XML_TYPE.toString());
    }
    resetResponse();
    return doChainedInvocation(httpMethod, headers, body, responseClass, genericType, null, null);
}

如果是这样,您可以使用type()方法在WebClient上设置内容类型。例如,让客户端生成JSON:

WebClient client = WebClient.create("http://MY_SERVER:9090/admission/services/processing");

client.type(MediaType.APPLICATION_JSON_TYPE);

Admission a = new Admission();
a.setCode("73935282");

Response r = client.path("/admission").put(a);