Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.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 在jax rs中将包含ByteBuffer的POJO放入Invocation.Builder.post时出现BadRequestException?_Java_Rest_Jackson_Jax Rs_Wildfly - Fatal编程技术网

Java 在jax rs中将包含ByteBuffer的POJO放入Invocation.Builder.post时出现BadRequestException?

Java 在jax rs中将包含ByteBuffer的POJO放入Invocation.Builder.post时出现BadRequestException?,java,rest,jackson,jax-rs,wildfly,Java,Rest,Jackson,Jax Rs,Wildfly,我试图在Arquillian测试类中发布一个POJO实体,如下所示 MyPojo pojo = new MyPojo(); pojo.setBuffer(ByteBuffer.wrap("Happy new year".getBytes()); //this is the problem pojo.setOtherFiled(someotherfield) Client client = ClientBuilder.newClient(); Invocation.Builder builder

我试图在Arquillian测试类中发布一个POJO实体,如下所示

MyPojo pojo = new MyPojo();
pojo.setBuffer(ByteBuffer.wrap("Happy new year".getBytes()); //this is the problem
pojo.setOtherFiled(someotherfield)

Client client = ClientBuilder.newClient();
Invocation.Builder builder = client.target(url).request(
            MediaType.APPLICATION_JSON_TYPE);

MyPojo response = builder.post(Entity.json(pojo), MyPojo.class);    
我的rest资源端点如下所示

 MyPojo myEndPoint(MyPojo pojoParam){
     //the body is immaterial since it's not going inside the body.
 }
我得到了
javax.ws.rs.BadRequestException:HTTP400错误请求

如果我注释掉
pojo.setBuffer(ByteBuffer.wrap(“新年快乐”.getBytes());
,它不会给出那个错误


上面的代码有什么问题?如何更正它?

最后我找到了原因。
Jackson
无法序列化
ByteBuffer
,因为它是一个抽象类。它不是直接的,可能需要额外的类型信息

在客户端,我们发送
json
(jackson序列化了
POJO
),但在传递到
rest
端点之前重构
POJO
类时,它无法从json重构POJO类的对象,因为它不知道如何创建
ByteBuffer
实例

我是通过在一个独立类中尝试使用
jackson
ByteBuffer
进行序列化和反序列化来实现的。它将

org.codehaus.jackson.map.JsonMappingException:无法构造java.nio.ByteBuffer的实例,问题:抽象类型只能使用其他类型信息进行实例化

Jackson
处于
Resteasy
中请求处理的预处理阶段。因此,
Resteasy
正在发出
400错误请求,因为它无法处理该请求


作为一种解决方法,我正在使用
byte[]
而不是
ByteBuffer
,并在最后将其转换为
ByteBuffer
实例。

将JSON映射器升级为fasterxml将解决此问题。我已升级,问题已为我解决


字符串必须是ByteBuffer吗?如果改用字符串会发生什么?我怀疑Entity.json不知道如何编码ByteBuffers。@PeterLawrey实例变量的类型是
ByteBuffer
MyPojo
,所以我应该作为字节缓冲区发送。实际上,这是我原始代码的缩小版本,它代表使问题复杂化。@PeterLawrey当我使用其他数据类型而不是ByteBuffer时,例如byte array,它正在工作。我们使用jackson。这是一个问题吗?只是出于好奇,你希望如何用JSON表示
ByteBuffer
。@peeskillet这是一个问题。在资源端点,我不关心JSON表示但是用MyPojo表示,它是无缝的。