首页 文章

无法从json字符串实例化类型的值

提问于
浏览
0

我有双向用户和组之间的多对多关系 .

@Entity
    @Table(name = "UserTBL")
    public class User {

    @Id
    @SequenceGenerator(name = "user_generator", sequenceName = "user_seq", allocationSize = 1, initialValue = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_generator")
    private Long id;

    private String username;

    private String password;

    @ManyToMany
    private List<Group> groups;
}


@Entity
@Table(name = "GroupTBL")
public class Group {

    @Id
    @SequenceGenerator(name = "Group_generator", sequenceName = "group_seq", allocationSize = 1, initialValue = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "Group_generator")
    private Long id;

    private String name;

    private String description;

    @ManyToMany(mappedBy = "groups")
    private List<User> users;
}

我正在使用java jax-rs web服务开发角度js应用程序,我正在使用jackson处理json绑定但是我得到了这个异常:

Can not instantiate value of type [simple type, class com.blog.models.Group] from JSON String; no single-String constructor/factory method (through reference chain: com.blog.models.User["groups"])

这是我发送到服务器的json对象:

{  
   "groups":[  
      "{\"id\":1,\"name\":\"admin\",\"description\":null,\"users\":[]}",
      "{\"id\":2,\"name\":\"user\",\"description\":null,\"users\":[]}"
   ],
   "username":"hussien",
   "password":"ammar"
}

资源:

@Stateless
@Path("/users")
public class UserResource {

    @EJB
    private UserFacade userFacade;

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    public void createUser(User user) {
        userFacade.create(user);
    }
}

1 回答

  • 2

    看起来在客户端,您可能会对JSON对象进行两次字符串化(组) . 你应该只调用一次 . 这就是JSON应该如何应对:

    {"groups":[
    {"id":1,"name":"admin","description":null,"users":[]},
    {"id":2,"name":"user","description":null,"users":[]}
    ],
    "username":"hussien",
    "password":"ammar"
    }
    

相关问题