Spring boot 如何从ContainerRequestContext获取数据以构建DTO对象
我是新泽西州的春天。我正在尝试构建一个过滤器来检查请求是否具有正确的参数。这是我要检查的json部分:Spring boot 如何从ContainerRequestContext获取数据以构建DTO对象,spring-boot,filter,jersey,Spring Boot,Filter,Jersey,我是新泽西州的春天。我正在尝试构建一个过滤器来检查请求是否具有正确的参数。这是我要检查的json部分: "request":{ "application":"1 Android Mobile", "version":1 } 数据元素是my VersionTo的一部分: public class VersionDTO { int version; String application; public String getAppli
"request":{
"application":"1 Android Mobile",
"version":1
}
数据元素是my VersionTo的一部分:
public class VersionDTO {
int version;
String application;
public String getApplication() {
return application;
}
public void setApplication(String application) {
this.application = application;
}
public int getVersion() {
return version;
}
public void setVersion(int version) {
this.version = version;
}
}
这是我的过滤器的代码:
@Override
public void filter(ContainerRequestContext requestContext) throws FilterException {
if (isSecureURL(requestContext.getUriInfo().getPath())){}{
try {
versionFilterService.setVersionDTO(//here is where I want to pass the VersionDTO object with the data of the requestContext);
} catch (ServiceException e) {
e.printStackTrace();
}
}
}
private boolean isSecureURL(String url) {
return !UnSecureUrlEnum.isUnSecureUrl(url);
}
}
我要做的是从ContainerRequestContext获取数据并构建一个版本,以便将对象传递给我的服务。这可能吗
感谢是前进 不可能在筛选器中获取实体,但是您可以获取请求inputstream,但您需要注意一些事情,因为只有一次可以对其进行流式处理。
看看这个,它可能会对你有所帮助 是的,这是可能的。使用Jersey,您可以在读取流之前对其进行缓冲,从而允许再次读取流。您需要强制转换到Jersey
ContainerRequest
中,在那里可以bufferEntity()
然后只需readEntity
即可获得反序列化对象
@Override
public void filter(ContainerRequestContext requestContext) throws FilterException {
ContainerRequest cr = (ContanerRequest) requestContext;
cr.bufferEntity();
VersionDTO dto = cr.readEntity(VersionDTO.class);
}