如果你使用Apache CXF開發web服務并使用JSON傳輸數據,就會經常遇到JSON中雙引號的問題。
public interface UserService { User getUser(String id); } public class UserServiceImpl implements UserService { public User getUser(String id) { User user = new User(id, "John", "Doe"); return user; } } User user = clientProxy.getUser("1"); System.out.println(user.toString());
在這個例子中,服務端返回一個User對象,但是由于CXF默認使用Jackson庫序列化JSON,所以返回的JSON字符串中,User對象的屬性名和屬性值之間是使用雙引號包裹的。
{"firstName":"John","id":"1","lastName":"Doe"}
但是在前端JavaScript中,這種JSON格式會導致錯誤。因為JavaScript的解析器只能識別單引號包裹的字符串。此時可以使用CXF提供的JSONProvider類來解決這個問題。
在JSONProvider中,通過設置arrayKeys屬性,來指定需要使用單引號包裹的屬性名。在上面的例子中,我們設置了firstName和lastName兩個屬性名需要使用單引號,其他屬性名使用雙引號。
{'firstName':'John',"id":"1",'lastName':'Doe'}
這樣前端JavaScript就可以正確地解析JSON字符串了。