`
qll3609120
  • 浏览: 55229 次
社区版块
存档分类
最新评论

ajax跨域调用restful webservice几种方式及webservice中文乱码问题

阅读更多

一、ajax跨域调用restful webservice

       1)jsonp的方式。略

        2)配置拦截器,设置允许那些origin可以发起跨域请求,具体代码:

        

public class TestInterceptor extends AbstractPhaseInterceptor<Message> {
    public TestInterceptor() {
        super(Phase.RECEIVE);
    }

    public TestInterceptor(String phase) {
        super(phase);
    }

    @Override
    public void handleMessage(Message message) throws Fault {
    	if (message.getDestination() != null) {
            System.out.println(message.getId() + "#" + message.getDestination().getMessageObserver());
        }
        if (message.getExchange() != null) {
            System.out.println(message.getExchange().getInMessage() + "#" + message.getExchange().getInFaultMessage());
            System.out.println(message.getExchange().getOutMessage() + "#" + message.getExchange().getOutFaultMessage());
        }
        HttpServletRequest request = (HttpServletRequest) message.get(  
                AbstractHTTPDestination.HTTP_REQUEST);//这句可以获取到request 
        HttpServletResponse response = (HttpServletResponse) message.get(  
                AbstractHTTPDestination.HTTP_RESPONSE);//这句可以获取到request 
        response.setCharacterEncoding("UTF-8");
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
    }
}

 

 

  • Access-Control-Allow-Origin 为允许哪些Origin发起跨域请求. 这里设置为"*"表示允许所有。
  • Access-Control-Allow-Methods 为允许请求的方法.
  • Access-Control-Max-Age 表明在多少秒内,不需要再发送预检验请求,可以缓存该结果
  • Access-Control-Allow-Headers 表明它允许跨域请求包含content-type头,这里设置的x-requested-with ,表示ajax请求

然后在把这个拦截器加入到配置文件里面

 

<bean id="testServiceInterceptor" class="com.fpi.prd.test.util.TestInterceptor" />

    <bean id="service" class="com.fpi.prd.test.service.Impl.UserRestFulServiceImpl" />

    <jaxrs:server id="testServiceContainer" address="/test">
        <jaxrs:serviceBeans>
            <ref bean="service" />
        </jaxrs:serviceBeans>
        <jaxrs:providers>  
            <bean class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider"/>  
        </jaxrs:providers>  
        <jaxrs:inInterceptors>
            <ref bean="testServiceInterceptor" />
        </jaxrs:inInterceptors>
        <jaxrs:extensionMappings>
            <entry key="json" value="application/json" />
            <entry key="xml" value="application/xml" />
        </jaxrs:extensionMappings>
        <jaxrs:languageMappings>
            <entry key="en" value="en-gb"/>
        </jaxrs:languageMappings>
    </jaxrs:server>

 二、请求webservice时候,返回的数据出现中文乱码问题,我们同样可以在拦截器里面配置

 

response.setCharacterEncoding("UTF-8");
1
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics