Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java REST客户端内容类型标头引发UnsupportedOperationException_Java_Rest_Post_Jersey - Fatal编程技术网

Java REST客户端内容类型标头引发UnsupportedOperationException

Java REST客户端内容类型标头引发UnsupportedOperationException,java,rest,post,jersey,Java,Rest,Post,Jersey,我正在开发一个REST客户机,以连接到我无权访问的外部服务器。我已经能够使用Postman和SOAPUi成功地建立通信,现在我正在尝试使用Java(org.glassfish.jersey.client.ClientResponse),但没有用,因为每当我包含“Content-type:application/json”头时,我都会得到一个异常,如果我不包含这个头,我会得到一个415错误(不支持的媒体类型),我相信这要求我包括内容类型标题 以下是标题准备: Client client = Cli

我正在开发一个REST客户机,以连接到我无权访问的外部服务器。我已经能够使用Postman和SOAPUi成功地建立通信,现在我正在尝试使用Java(org.glassfish.jersey.client.ClientResponse),但没有用,因为每当我包含“Content-type:application/json”头时,我都会得到一个异常,如果我不包含这个头,我会得到一个415错误(不支持的媒体类型),我相信这要求我包括内容类型标题

以下是标题准备:

Client client = ClientBuilder.newClient();

MultivaluedMap<String, Object> headerMap = new MultivaluedHashMap<String, Object> ();

String username="admin";
String password="admin";
String usernameAndPassword = username + ":" + password;
String authorizationHeaderValue = "Basic " + java.util.Base64.getEncoder().encodeToString( usernameAndPassword.getBytes() );
headerMap.put("Authorization", Arrays.asList(new Object [] { authorizationHeaderValue }));
//headerMap.put("Content-Type", Arrays.asList(new Object [] { "application/json" }));
headerMap.put(HttpHeaders.CONTENT_TYPE, Arrays.asList(new Object [] { MediaType.APPLICATION_JSON }));
post方法调用:

Response response = client
    .target("https://example.com")
    .request("application/json")
    .headers(headerMap)
    .post(Entity.text(value.toString()));
我得到的错误是:

Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(Unknown Source)
at java.util.AbstractList$Itr.remove(Unknown Source)
at java.util.AbstractList.removeRange(Unknown Source)
at java.util.AbstractList.clear(Unknown Source)
at javax.ws.rs.core.AbstractMultivaluedMap.putSingle(AbstractMultivaluedMap.java:97)
at org.glassfish.jersey.message.internal.OutboundMessageContext.setMediaType(OutboundMessageContext.java:708)
at org.glassfish.jersey.client.ClientRequest.type(ClientRequest.java:419)
at org.glassfish.jersey.client.ClientRequest.variant(ClientRequest.java:443)
at org.glassfish.jersey.client.JerseyInvocation$Builder.storeEntity(JerseyInvocation.java:179)
at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:427)
at org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:334)
at main.java.ofbizrestclientdemo.Main.testCreateProduct(Main.java:438)
at main.java.ofbizrestclientdemo.Main.main(Main.java:520)
一段时间以来,我一直在试图找出这个问题的原因,但没有结果。有人知道是什么原因导致了这个错误吗

提前感谢。

更改

.post(Entity.text(value.toString())

.post(Entity.json(value.toString())

在你的客户电话里。Entity.text生成“文本/普通”内容类型


文档:

问题是由
标题映射中的这些值引起的:

headerMap.put("Authorization", Arrays.asList(new Object [] { authorizationHeaderValue }));
headerMap.put(HttpHeaders.CONTENT_TYPE, Arrays.asList(new Object [] { MediaType.APPLICATION_JSON }));
Arrays.asList
返回一个不可修改的映射,但
AbstractMultivaluedMap.putSingle
尝试清除值列表,这是列表不允许的,并引发一个
UnsupportedOperationException


我建议将
Arrays.asList
替换为正常的
List
初始化(
newarraylist()
)。

此异常与内容类型无关。确保您使用的HTTP方法正确,请求URL正确。Entity.text(value.toString())做什么?
headerMap.put("Authorization", Arrays.asList(new Object [] { authorizationHeaderValue }));
headerMap.put(HttpHeaders.CONTENT_TYPE, Arrays.asList(new Object [] { MediaType.APPLICATION_JSON }));