rest - 使用 MessageBodyReader 时,面对来自 JAX-RS 客户端的 HTTP 415 Unsupported Media Type
问题描述
我是 JAX-RS 和学习的 RESTFul 新手。只有当我从 JAX-RS 客户端应用程序请求时,我才会遇到问题。它在帖子插件中工作正常。但是当我用“application/xml”改变@Consumes(“myformat/xml”)时,它就可以工作了。下面是代码。
消息体阅读器:
package com.memorynotfound.jaxrs.chunked;
import java.io.IOException;
import java.io.InputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import javax.ws.rs.Consumes;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.MessageBodyReader;
import javax.ws.rs.ext.Provider;
@Provider
@Consumes("myformat/xml")
public class UserMessageBodyReader implements MessageBodyReader<User> {
public boolean isReadable(Class<?> arg0, Type arg1, Annotation[] arg2, MediaType arg3) {
if (arg0.equals(User.class))
return true;
else
return false;
}
public User readFrom(Class<User> arg0, Type arg1, Annotation[] arg2, MediaType arg3,
MultivaluedMap<String, String> arg4, InputStream arg5) throws IOException, WebApplicationException {
return new User(1, "Jphn Doe");
}
}
资源:
package com.memorynotfound.jaxrs.chunked;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
@Path("/users")
public class UserResource {
@POST
@Consumes("myformat/xml")
public User getUser(User user) {
return user;
}
}
客户端代码:
package com.restfulexample.client.messagebodyreader;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
public class MessageBodyReader {
public static void main(String[] args) {
Client client = ClientBuilder.newClient();
User user = new User(1, "Jphn Doe");
User postedUser = client.target("http://localhost:9090/message-body-reader/api/users").request("myformat/xml")
.post(Entity.xml(user), User.class);
System.out.println(postedUser.getId() + " " + postedUser.getName());
}
}
解决方案
使用以下代码找到解决方案...
客户端客户端 = ClientBuilder.newClient().register(UserMessageBodyReader.class) .register(UserMessageBodyWriter.class);
我们必须向客户端注册 MessageBodyReader 和 Writer。
推荐阅读
- excel - 查找打开 Excel 文件的用户时出错
- github - go-get 无法从 github 下载
- android - java.lang.SecurityException:无法使 java.lang.Class 构造函数可访问
- c# - 如何扩展项目报价屏幕 (PM304500)?
- python-3.x - 如何从python中的列表中删除重复项
- java - 放心 + 属性 baseURI 不能为空 类未加载
- python - tsfresh 时间序列缺失值
- python-3.x - 无法使用 pip 安装模块 - 它给出了错误
- python - 如何从 django 框架中的文件字段下载文件
- python - Python3中的(while queue)和(while not queue.empty())有什么区别