当先锋百科网

首页 1 2 3 4 5 6 7

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