最近我在使用cxf框架時遇到了一個問題,就是攔截返回json時出現(xiàn)了錯誤。這里將問題及解決方法分享給大家。
具體的錯誤表現(xiàn)是,當我向服務端發(fā)送請求,期望得到一個json格式的響應數(shù)據時,卻收到了其他格式的數(shù)據。通過查看網絡請求的響應頭部,我發(fā)現(xiàn)內容類型被設置為了text/html,而不是我期望的application/json。
經過仔細調查,我發(fā)現(xiàn)問題出在了cxf的攔截器上。在我的應用中,我使用了一個自定義的攔截器來對所有返回的響應數(shù)據進行處理。可是,我的攔截器并沒有正確地設置響應頭的內容類型,導致客戶端無法正確解析返回的json數(shù)據。
public class MyResponseInterceptor extends AbstractPhaseInterceptor<Message> { @Override public void handleMessage(Message message) throws Fault { //獲取響應頭 Map<String, List<String>> headers = (Map<String, List<String>>) message.get(Message.PROTOCOL_HEADERS); if (headers != null) { //設置響應頭中的內容類型為application/json headers.put("Content-Type", Collections.singletonList("application/json")); } } }
通過在我的自定義攔截器中設置正確的響應頭內容類型,我成功地解決了這個問題。這樣客戶端就可以正確地解析返回的json數(shù)據了。
總的來說,如果您在使用cxf框架時遇到了類似的問題,您可以嘗試檢查您的攔截器設置是否正確,是否在正確的攔截階段進行處理。
上一篇cxgrid加載json
下一篇c+++使用json