Java MessageBodyReader是否支持DTO类?
我想使用实现从客户端读取UserDto类的自定义 如何实现UserDtoReader以获取UserDto的实例? 这是我的UserDto类:Java MessageBodyReader是否支持DTO类?,java,spring-mvc,grails,groovy,jax-rs,Java,Spring Mvc,Grails,Groovy,Jax Rs,我想使用实现从客户端读取UserDto类的自定义 如何实现UserDtoReader以获取UserDto的实例? 这是我的UserDto类: public class UserDto { private String firstName; private String lastName; public UserDto() { firstName = ""; lastName = ""; } public UserDto(
public class UserDto {
private String firstName;
private String lastName;
public UserDto() {
firstName = "";
lastName = "";
}
public UserDto(String firstName,
String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Override
public String toString() {
String s = " { User ";
s += "id=" + id + " ";
s += "firstName=" + firstName + " ";
s += "lastName=" + lastName + " ";
s += " User } ";
return s;
}
}
这是我的UserDtoReader类:
@Consumes("application/json")
class UserDtoReader extends MessageBodyReaderSupport<UserDto> {
@Override
public UserDto readFrom(MultivaluedMap<String, String> httpHeaders,
InputStream entityStream) throws IOException,
WebApplicationException {
// TODO Auto-generated method stub
return null;
}
}
@消耗(“应用程序/json”)
类UserDtoReader扩展了MessageBodyReaderSupport{
@凌驾
要读取的公共用户数据(多值映射HttpHeader,
InputStream entityStream)引发IOException,
WebApplicationException{
//TODO自动生成的方法存根
返回null;
}
}
@Provider
@使用(MediaType.APPLICATION_JSON)
公共最终类UserDtoReader实现MessageBodyReader{
私有静态最终字符串UTF_8=“UTF-8”;
私人Gson;
私有Gson getGson(){
if(gson==null){
最终GsonBuilder GsonBuilder=新的GsonBuilder();
gson=gsonBuilder.create();
}
返回gson;
}
要读取的公共用户数据(java.lang.Class类型,
java.lang.reflect.Type genericType,
java.lang.annotation.annotation[]注释,MediaType MediaType,
多值MAP HttpHeader,
java.io.InputStream entityStream)引发IOException{
InputStreamReader streamReader=新的InputStreamReader(entityStream,UTF_8);
试一试{
类型jsonType;
if(type.equals(genericType))
jsonType=type;
其他的
jsonType=genericType;
UserDto UserDto=getGson().fromJson(streamReader,jsonType);
返回userDto;
}最后{streamReader.close();}
}
@凌驾
公共布尔值可读取(类类型、类型genericType、,
java.lang.annotation.annotation[]注释,MediaType(MediaType){
返回true;
}
}
您可以从
配置
JAX-RS资源类和提供者类的子集(MessageBodyReaders和MessageBodyWriter)。这些类通过javax.ws.RS.core.Application类的扩展在JAX-RS运行时中配置
public class ApplicationConfig extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> resources = new java.util.HashSet<>();
resources.add(UserDtoReader.class);
return resources;
}
公共类应用程序配置扩展应用程序{
@凌驾
public Set>resources=new java.util.HashSet();
添加(UserDtoReader.class);
归还资源;
}
使用以下方法:
@Consumes("application/json")
class UserDtoReader extends MessageBodyReaderSupport<UserDto> {
@Override
public UserDto readFrom(MultivaluedMap<String, String> httpHeaders,
InputStream entityStream) throws IOException,
WebApplicationException {
return new JsonSlurper().parse(new InputStreamReader(entityStream))
}
}
@消耗(“应用程序/json”)
类UserDtoReader扩展了MessageBodyReaderSupport{
@凌驾
要读取的公共用户数据(多值映射HttpHeader,
InputStream entityStream)引发IOException,
WebApplicationException{
返回新的JsonSlurper().parse(新的InputStreamReader(entityStream))
}
}
很好,但是我可以用:MessageBodyReaderSupport也这样做吗?实际上MessageBodyReaderSupport类实现MessageBodyReader,这取决于您如何保持设计实现,请遵循您在本文中提到的上述链接
@Consumes("application/json")
class UserDtoReader extends MessageBodyReaderSupport<UserDto> {
@Override
public UserDto readFrom(MultivaluedMap<String, String> httpHeaders,
InputStream entityStream) throws IOException,
WebApplicationException {
return new JsonSlurper().parse(new InputStreamReader(entityStream))
}
}