我使用yo jhipster
创建了一个Jhipster应用程序,并使用yo jhipster:entity hikelist
创建了一个实体hikelist。
当我试图使用jhipster生成的服务和控制器保存我的实体时,我得到了一个不好的请求400.我找不到这个错误的原因。不调用java资源。有没有办法在我的http请求中获取有关此问题原因的更多信息?
我的后端资源:
@RequestMapping(value = "/rest/hikelists",
method = RequestMethod.POST,
produces = "application/json")
@Timed
public void create(@RequestBody HikelistDTO hikelist) {
log.debug("REST request to save Hikelist : {}", hikelist);
hikelistRepository.save(hikelist);
}
客户端http调用的create函数:
$scope.create = function () {
Hikelist.save($scope.hikelist,
function () {
$scope.hikelists = Hikelist.query();
$('#saveHikelistModal').modal('hide');
$scope.clear();
});
};
我错过了什么吗?还有其他配置吗?
谢谢。
答案 0 :(得分:2)
问题是您的JSON没有正确地序列化到您的DTO中,更可能是因为您不想亲自触摸ID或其他值,而是希望您的数据库管理。我刚刚面临同样的问题,找到了一个很好的,干净的解决方法,而根本没有改变Angular:
向DTO添加两个新方法,以便可以从JSON字符串实例化,或者使用null:
public UserDTO(String firstName, String lastName, String email, Map<String, Boolean> roles) {
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
this.roles = roles;
}
和
public static UserDTO fromJsonToUserDTO(String json) {
return new JSONDeserializer<UserDTO>()
.use(null, UserDTO.class).deserialize(json);
}
更新您的服务以接受JSON结构而不是直接DTO,然后仅使用您想要的字段转换为内联DTO。
@RequestMapping(value = "/rest/account",
method = RequestMethod.POST,
produces = "application/json")
@Timed
public void saveAccountFromJSON(@RequestBody String json) throws IOException {
UserDTO userDTO = UserDTO.fromJsonToUserDTO(json);
userService.updateUserInformation(userDTO.getFirstName(), userDTO.getLastName(), userDTO.getEmail());
}