ошибка jhipster 400 BAD REQUEST с сохранением ресурсов $

Я создал приложение Jhipster с помощью yo jhipster и создал список походов сущностей с помощью yo jhipster:entity 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-вызовом на стороне клиента:

$scope.create = function () {
Hikelist.save($scope.hikelist,
  function () {
    $scope.hikelists = Hikelist.query();
    $('#saveHikelistModal').modal('hide');
    $scope.clear();
  });
};

Я что-то пропустил? Есть ли что-то еще для настройки?

Спасибо.


person user1260928    schedule 02.04.2014    source источник
comment
Я сам работаю над той же проблемой сегодня вечером... надеюсь, к завтрашнему дню у меня будет ответ для вас.   -  person degreesightdc    schedule 04.04.2014
comment
Я столкнулся с той же ошибкой... @ user2495290 ты ее решил?   -  person andreapier    schedule 05.04.2014


Ответы (1)


Проблема в том, что ваш JSON неправильно сериализуется в ваш DTO, скорее всего, из-за идентификатора или какого-либо другого значения, которое вы на самом деле не хотите трогать вручную, а вместо этого хотите, чтобы ваша БД управляла. Я только что столкнулся с той же проблемой и нашел хороший, чистый обходной путь, вообще не меняя 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());
    }
    
person degreesightdc    schedule 05.04.2014
comment
Спасибо, просто добавление пустого конструктора в мой объект DTO решило проблему. - person user1260928; 06.04.2014