我正在Jersey
上构建REST服务,并使用Jackson
从我模型的java类生成JSON。具有绝对简单值的模型,我认为这是最典型的情况。但我得到了奇怪的结果:
[{\'name\':\'Nick\',\'role\':\'admin\',\'age\':\'32\',\'rating\':47}]
我的预期结果是:
[{“姓名”:“尼克”,“角色”:“管理员”,“年龄”:“32”,“评级”:47}]
我的字段源值不包含任何特殊字符。这些都是简单的词
这是我的Java类。
实体:
公共类用户{
私有字符串名称;
私有字符串角色;
私弦时代;
私人整数评级;
休息服务类别:
@ServiceConfig(contextName=“myContext”)
@路径(“/myrest”)
公共类myrest服务{
私有静态最终字符串JSON\u CONTENT\u TYPE=MediaType.APPLICATION\u JSON+“charset=UTF-8”;
@上下文
受保护的HttpServletResponse;
@得到
@路径(“/users”)
@公开交易
@产生({MediaType.APPLICATION_JSON})
公共字符串查找器(@QueryParam(“部门”)字符串部门){
setContentType(JSON内容类型);
pdtreponse.status(response.sendStatus(response.status.OK.getStatusCode());
列表<;用户>;用户=新阵列列表<;>;();
添加(新用户(“尼克”、“管理员”、“32”、“47”);
字符串jsonInString;
ObjectMapper mapper=新的ObjectMapper();
试一试{
jsonInString=mapper.writeValueAsString(用户);
}捕获(JsonProcessingException ex){
jsonInString=“抛出异常:”+ex.getMessage();
}
返回jsonInString;
}
我已尝试对字符串属性使用注释@JsonRawValue
:
@JsonRawValue
私有字符串名称;
但本案的结果是:
[{“姓名”:尼克,“角色”:管理员,“年龄”:32,“评级”:47}]
我希望:
[{“姓名”:“尼克”,“角色”:“管理员”,“年龄”:“32”,“评级”:47}]
很明显,Jackson以某种方式逃避了json响应结果中的引号。但为什么要这样做,最重要的是如何避免这样做?它们本身就是字符串!没有任何引号或特殊字符
我使用java7
和jackson2.6.1
以及Postman
来测试结果。
有什么办法解决我的问题吗
您可以配置ObjectMapper:
final ObjectMapper mapper=new ObjectMapper();
配置(JsonGenerator.Feature.QUOTE\u字段名称,false);
configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES,true);
字符串jsonUsers=mapper.writeValueAsString(用户);
更多信息请点击这里