jhipster错误400 BAD REQUEST $资源保存

时间:2014-04-02 09:05:24

标签: http post resources jhipster

我使用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();
  });
};

我错过了什么吗?还有其他配置吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

问题是您的JSON没有正确地序列化到您的DTO中,更可能是因为您不想亲自触摸ID或其他值,而是希望您的数据库管理。我刚刚面临同样的问题,找到了一个很好的,干净的解决方法,而根本没有改变Angular:

  1. 向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);
    }
    
  2. 更新您的服务以接受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());
    }