我REST-Jersey
在我的项目中使用。所有POST数据都以JSON
格式发送,并在服务器端解组到各自的bean中。像这样:
向服务器发送请求:
$('a#sayHelloPost').click(function(event){
event.preventDefault();
var mangaData = {
title:'Bleach',
author:'Kubo Tite'
}
var formData=JSON.stringify(mangaData);
console.log(formData);
$.ajax({
url:'rest/cred/sayposthello',
type: 'POST',
data: formData,
dataType: 'json',
contentType:'application/json'
})
});
有效负载:
{"title":"Bleach","author":"Kubo Tite"}
服务器端:
@POST
@Path("/sayposthello")
@Produces(MediaType.APPLICATION_JSON)
public Response sayPostHello(MangaBean mb){
System.out.println(mb);
return Response.status(200).build();
}
MangaBean:
public class MangaBean {
private String title;
private String author;
@Override
public String toString() {
return "MangaBean [title=" + title + ", author=" + author + "]";
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}
在控制台上输出:
MangaBean [title=Bleach, author=Kubo Tite]
我从这里获得了REST-interceptor实现。
public class JerseyFilter implements ContainerRequestFilter{
@Override
public ContainerRequest filter(ContainerRequest req) {
return req;
}
}
我想访问拦截器中的有效负载(请求主体)。由于数据为JSON格式,因此无法将其作为请求参数进行访问。 有没有办法在拦截器方法中获取请求正文? 请指教。
这是一种可以实现的方法,与Jersey实现其日志记录过滤器的方式非常相似。您可以阅读该实体并将其粘贴回请求,因此您不小心在过滤器中不使用它。
import com.sun.jersey.api.container.ContainerException;
import com.sun.jersey.core.util.ReaderWriter;
import com.sun.jersey.spi.container.ContainerRequest;
import com.sun.jersey.spi.container.ContainerRequestFilter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class JerseyFilter implements ContainerRequestFilter {
@Override
public ContainerRequest filter(ContainerRequest request) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
InputStream in = request.getEntityInputStream();
final StringBuilder b = new StringBuilder();
try {
if (in.available() > 0) {
ReaderWriter.writeTo(in, out);
byte[] requestEntity = out.toByteArray();
printEntity(b, requestEntity);
request.setEntityInputStream(new ByteArrayInputStream(requestEntity));
}
return request;
} catch (IOException ex) {
throw new ContainerException(ex);
}
}
private void printEntity(StringBuilder b, byte[] entity) throws IOException {
if (entity.length == 0)
return;
b.append(new String(entity)).append("\n");
System.out.println("#### Intercepted Entity ####");
System.out.println(b.toString());
}
}
我在我的项目中使用。所有POST数据都以格式发送,并在服务器端解编入各自的bean中。类似于这样: 向服务器发送请求: 我从这里得到了REST拦截器的实现。 我想访问拦截器中的有效载荷(请求体)。由于数据是JSON格式的,因此不能作为请求参数访问。是否有一种方法可以在拦截器方法中获得请求正文?请指教。
我已经使用spring编写了一个拦截器,它以preHandle方法从HTTPServletRequest读取请求正文。请求正文包含json。我还能够读取请求正文,但请求对象发生了一些事情,请求正文变得空白。正因为如此,这个请求正成为一个糟糕的请求。任何帮助都将不胜感激。提前谢谢。
问题内容: 我真的很感谢Spring 3阳极驱动的Web控制器映射 我有很多带有类似签名的控制器: 但是我的问题是,我想编写一个拦截器,该拦截器在处理后会通过BindingResults-如何从HttpRequest或HttpResponse中获取它们? 因为intercpetor方法具有相同的签名 问题答案: 因此,在@Axtavt的大力帮助下,我得出了结论,即可以在postHandle方法中从
问题内容: 我知道如何拦截所有请求,但是我只想拦截来自我资源的请求。 有谁知道如何做到这一点? 问题答案: 如果只想拦截来自特定资源的请求,则可以使用可选的action 属性。Angular的文档请参见此处(用法>操作) 的JavaScript Plunker:http ://plnkr.co/edit/xjJH1rdJyB6vvpDACJOT?p=preview
我正在创建使用改装的Android应用程序。我用Spring作为Restapi。我使用了JWT的身份验证。我在这里使用了两个拦截器。使用到期JWT调用api的场景如下 > 使用 服务器检查令牌和响应代码401/403 客户端检查响应代码并使用头中带有refreshtoken的调用/刷新 服务器检查refreshtoken并使用新accesstoken进行响应 现在的问题是如何再次打电话/你好。每个
Spring的处理器映射机制包含了处理器拦截器。拦截器在你需要为特定类型的请求应用一些功能时可能很有用,比如,检查用户身份等。 处理器映射处理过程配置的拦截器,必须实现 org.springframework.web.servlet包下的 HandlerInterceptor接口。这个接口定义了三个方法: preHandle(..),它在处理器实际执行 之前 会被执行; postHandle(..