Java MessageBodyReader是否支持DTO类?

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(

我想使用实现从客户端读取UserDto类的自定义

如何实现UserDtoReader以获取UserDto的实例?

这是我的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))
    }
}