使用jersey进行飞行前请求后解析请求中的异常 [英] exception in parsing the request after pre-flight request using jersey
问题描述
-
我们创建了CORS过滤器,如下所示:
We have created the CORS filter as follows:
@Provider
public class CORSFilter implements ContainerResponseFilter {
@Override
public void filter(ContainerRequestContext request,
ContainerResponseContext response) throws IOException {
// TODO: Allow only from *our* Web front
response.getHeaders().add("Access-Control-Allow-Origin", "*");
response.getHeaders().add("Access-Control-Allow-Headers",
"origin, content-type, accept,x-request-id, x-api-key, x-api-secret, authorization");
response.getHeaders().add("Access-Control-Allow-Credentials", "true");
response.getHeaders().add("Access-Control-Allow-Methods",
"GET, POST, PUT, DELETE, OPTIONS, HEAD");
}
}
我们已经创建了REST资源
We have created a REST resource
以下为代码:
@Path("MyResource")
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public String MyResource(TestInput input) {
return input.getName();
}
TestInput类如下:
The class TestInput is as follows:
public class TestInput {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
它产生的结果为预期邮递员。但是,如果我们从 http://resttesttest.com/ 或任何客户端访问资源,则会发生以下错误:
It produces the result as expected from Postman. But if we hit the resource from http://resttesttest.com/ or any client, following error occurs:
javax.servlet.ServletException:javax.json.stream.JsonParsingException:意外的char 117位于(第1行,第1列,第= 1,偏移量= 0)
org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:432)
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:370 )
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:389)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:342)
org .glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:229)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
根本原因
如果存在cors标头,则返回预检请求。
请对此进行指导。
推荐答案
我认为ContainerResquestFilter没问题。您只需要更新您的 TestInput 类并在其上添加以下注释即可。
I think there's nothing wrong with your ContainerResquestFilter. What you need to do only update your TestInput class and add the following annotation on it.
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class TestInput {
@XmlElement
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
这篇关于使用jersey进行飞行前请求后解析请求中的异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!