将根元素添加到生成的json对象

时间:2014-04-03 12:12:13

标签: java json rest jpa jackson

我的java模型类如下所示。

@Entity(name = "bank_um_privilege")
@JsonRootName(value="Privilege")
public class Privilege extends Model {
    private static final long serialVersionUID = -8307505934865392503L;

    @Id
    @Column(name = "privilege_name", nullable = false)
    private String privilegeName;

    @Column(name = "description", nullable = false)
    private String description;
}

我为传递值创建了其他完整的Web服务。

 @GET
  @Path(WSPath.GET_ALL_USER_PRIVILEGES)
  public Response getUserPrivileges() throws JsonGenerationException, JsonMappingException, IOException {

    List<Privilege> userPrivileges = userService.getUserPrivileges();
    ObjectMapper om = new ObjectMapper();
    om.configure(org.codehaus.jackson.map.SerializationConfig.Feature.WRAP_ROOT_VALUE, true);
    return Response.ok(om.writeValueAsString(userPrivileges)).build();
  }

我发送上述特权列表作为回复。回应如下所示。

     "ArrayList":
   [
       {
           "version": 0,
           "privilegeName": "ADMIN_LOGIN",
           "description": "Login authority to administration application",
           "code": "900",
           "status": 0,
           "category": "User Management"
       },...

现在我需要在上面的json对象中添加root元素,看起来就像那样。需要添加&#34; Privilege&#34;名称为&#34; ArrayList&#34;

的根名称
"privilege":{
           "version": 0,
           "privilegeName": "ADMIN_LOGIN",
           "description": "Login authority to administration application",
           "code": "900",
           "status": 0,
           "category": "User Management"
        },...

我正在使用JPA来保存数据。告诉我任何一个我该怎么做。

1 个答案:

答案 0 :(得分:0)

Spring中,您有默认的ObjectMapper bean,它将您的对象序列化为JSON。您必须使用以下代码覆盖此默认bean:

ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);

使用它,您的输出应该与您预期的一样。

更新1
在这种情况下,当您想要将项目包装在集合中时,您必须实现自定义序列化程序并使用此序列化程序注释特定的List<POJO> property。有关此问题,请参阅@Sotirios_Delimanolis的答案:Jackson JSON List with Object Type