Java JAX-RS MessageBodyReader
我正在从提供者那里学习MessageBodyReader方法的工作原理。我看到该方法返回了一个对象,但我不确定如何从服务访问该对象。我能解释一下如何从reader类返回对象吗?这将帮助我为所有DTO应用读取规则。提前谢谢 服务:Java JAX-RS MessageBodyReader,java,jax-rs,Java,Jax Rs,我正在从提供者那里学习MessageBodyReader方法的工作原理。我看到该方法返回了一个对象,但我不确定如何从服务访问该对象。我能解释一下如何从reader类返回对象吗?这将帮助我为所有DTO应用读取规则。提前谢谢 服务: @POST @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) @Path("/CreateAccount") @Consumes(
@POST
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@Path("/CreateAccount")
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Response createAccount(@Context HttpServletRequest req) {
String a = "Reader success? ";//Would to see that string here!
return Response.ok().build();
}
提供者:
@Provider
public class readerClass implements MessageBodyReader<Object>
{
@Override
public boolean isReadable(Class<?> paramClass, Type paramType,
Annotation[] paramArrayOfAnnotation, MediaType paramMediaType) {
// TODO Auto-generated method stub
return true;
}
@Override
public Object readFrom(Class<Object> paramClass, Type paramType,
Annotation[] paramArrayOfAnnotation, MediaType paramMediaType,
MultivaluedMap<String, String> paramMultivaluedMap,
InputStream paramInputStream) throws IOException,
WebApplicationException {
// TODO Auto-generated method stub
return "Successfully read from a providers reader method";
}
}
@Provider
公共类readerClass实现MessageBodyReader
{
@凌驾
公共布尔值可读取(类paramClass,类型paramType,
注释[]ParamArrayOfNotation,MediaType paramMediaType){
//TODO自动生成的方法存根
返回true;
}
@凌驾
公共对象读取自(类paramClass,类型paramType,
注释[]ParamArrayOfNotation,MediaType paramMediaType,
多值映射参数多值映射,
InputStream参数InputStream)引发IOException,
WebApplicationException{
//TODO自动生成的方法存根
返回“从提供程序读取器方法成功读取”;
}
}
您误解了MessageBodyReader的用途,它用于以下用途:
支持将流转换为流的提供程序的合同
Java类型。要添加MessageBodyReader实现,请对
带有@Provider的实现类。阅读者
实现可能会使用Consumes进行注释,以限制媒体
适用的类型
例如:
如果您有一个使用xml/json以外的自定义格式的用例,您希望提供自己的解组器,您可以使用messagebody reader
@Provider
@Consumes("customformat")
public class CustomUnmarshaller implements MessageBodyReader {
@Override
public boolean isReadable(Class aClass, Type type, Annotation[] annotations, MediaType mediaType) {
return true;
}
@Override
public Object readFrom(Class aClass, Type type, Annotation[] annotations, MediaType mediaType, MultivaluedMap multivaluedMap, InputStream inputStream) throws IOException, WebApplicationException {
Object result = null;
try {
result = unmarshall(inputStream, aClass); // un marshall custom format to java object here
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
在webservice中,您可以像这样使用
@POST
@Path("/CreateAccount")
@Consumes("custom format")
public Response createAccount(@Context HttpServletRequest req,Account acc) {
saveAccount(acc); // here acc object is returned from your custom unmarshaller
return Response.ok().build();
}
更多信息:
,