我目前正在使用SpringBoot API与MongoRepository进行交互,但我无法理解传递的JSON如何成为Mongo中的存储文档。我目前有一个存储一组用户的简单API:
@Document
@JsonInclude
public class Group {
@Id
@JsonView(Views.Public.class)
private String id;
@JsonView(Views.Public.class)
private String name;
@JsonView(Views.Public.class)
private Set<GroupMember> groupMembers = new HashSet<>();
}
每个领域都有setter和getter方法,虽然我不知道这些方法的必要性(最后见问题)。
以下是我使用的简单组件:
@Component
@Path("/groups")
@Api(value = "/groups", description = "Group REST")
public class Groups {
@Autowired
private GroupService groupService;
@GET
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "Get all Groups", response = Group.class, responseContainer = "List")
@JsonView(Views.Public.class)
public List<Group> getAllGroups() {
return groupService.getAllGroups();
}
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@ApiOperation(value = "Create a Group", response = Group.class)
@JsonView(Views.Detailed.class)
public Group submitGroup(Group group) {
return groupService.addGroup(group);
}
}
最后,我有一个服务类:
@Service
public class GroupServiceImpl implements GroupService {
@Autowired
private GroupRepository groupRepository;
@Override
public Group addGroup(Group group) {
group.setId(null);
return groupRepository.save(group);
}
@Override
public List<Group> getAllGroups() {
return groupRepository.findAll();
}
}
GroupRespository
只是一个扩展MongoRepository<Group,String>
现在,当我实际调用POST
方法时,主体包含:
{
"name": "group001",
"groupMembers": []
}
我看到它正确地使用随机Mongo UUID插入此组。但是,如果我尝试在列表中插入GroupMember
个对象,则会收到空指针异常。由此,我有两个问题:
List
代替Set
进行了测试,但它确实有效,但我不知道为什么。我的猜测是,对于在我的类中声明并在我的JSON对象中列出的每个对象,SpringBoot调用一个在幕后神奇地创建的构造函数,并且Set对于该接口不存在。Set
(相同的用户不应该两次出现)。我可以使用哪些工具来使SpringBoot按预期工作?在我看来,春天发生的很多事情都是幕后的,这让我很难理解为什么事情会发生作用。不知道为什么工作会使得从头开始构建事物变得困难,这让我感觉好像是在一起攻击一个项目而不是实际设计一个项目。所以我的最后一个问题是,是否有一个指南可以解释幕后的布线?
最后,这是我第一次使用Spring ...所以请原谅我,如果我的问题完全没有问题,但我会很感激任何答案。