如果你使用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字符串了。