最近在使用cxf框架開發webservice服務的時候,遇到了一個問題,就是攔截器返回的json數據不是很規范,想要做一下優化,于是查找了相關的資料和代碼,終于實現了正確的返回結果。下面就將具體操作分享給大家。
首先,我們在攔截器中可以通過getResponse()方法獲取到服務器返回的響應對象。我們需要在響應對象中設置Content-Type和響應數據。
private static final String CONTENT_TYPE = "application/json;charset=utf-8"; public void handleMessage(SoapMessage message) throws Fault { ServletContext servletContext = (ServletContext) message.getContextualProperty(ServletContext.class.getName()); HttpServletResponse response = (HttpServletResponse) message.getExchange().getOutMessage().get(CONTAINER_RESPONSE); if (response == null) { return; } response.setHeader("Content-Type", CONTENT_TYPE); try { response.setStatus(HttpServletResponse.SC_OK); response.getWriter().write(jsonString); response.getWriter().flush(); } catch (IOException e) { logger.error("write response failed.", e); throw new Fault(e.getMessage()); } }
其中,jsonString是由我們自己封裝好的json格式字符串。
其次,在Servlet中,我們需要添加一個過濾器,將響應中Content-Type設置為JSON格式。
public void init(FilterConfig filterConfig) {} public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; httpResponse.setContentType(CONTENT_TYPE); //設置Content-Type httpResponse.setCharacterEncoding("UTF-8"); chain.doFilter(request, response); } public void destroy() {}
最后,我們還需要在web.xml中添加如下代碼,注冊上述Filter。
JsonFilter com.xxx.JsonFilter JsonFilter /*
通過上述操作,我們就可以實現攔截器返回json數據的正常格式化了。希望對大家有所幫助!
上一篇cxf輸出json
下一篇vue 點擊切換事件