使用jersey进行飞行前请求后解析请求中的异常 [英] exception in parsing the request after pre-flight request using jersey

查看:155
本文介绍了使用jersey进行飞行前请求后解析请求中的异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


  1. 我们创建了CORS过滤器,如下所示:

  1. 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屋!

  • 查看全文
    相关文章
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆