Как получить класс не-сущности в качестве параметра в методе POST? - PullRequest
0 голосов
/ 04 ноября 2019

Метод контроллера:

@PostMapping("/nova")
@ResponseStatus(HttpStatus.CREATED)
public String adicionarTemp(@RequestBody TempCaptacao temp) {

Класс параметров:

public class TempCaptacao{
    String dsNome;
    ...
    List<TempResponsavel> listaResponsavel;
public TempCaptacao() {

        }

Класс SubParam:

public class TempResponsavel{
        Long id;
        String dsNome;
...
public TempResponsavel() {

        }

Когда Angular вызывает этот метод, передавая JSON (какниже) мои источники возвращают эту ошибку:

.wsmsDefaultHandlerExceptionResolver: Resolved [org.springframework.http.converter.HttpMessageNotReadableException: ошибка синтаксического анализа JSON: Невозможно создать экземпляр com.spin.spincare.controller.MovAtendimentoCaptacaoController$TempCaptacao (хотя существует хотя бы один создатель):создавать экземпляры нестатического внутреннего класса только с помощью конструктора без аргументов по умолчанию;Вложенное исключение - com.fasterxml.jackson.databind.exc.MismatchedInputException: Невозможно создать экземпляр com.spin.spincare.controller.MovAtendimentoCaptacaoController$TempCaptacao (хотя существует по крайней мере один создатель): может только создавать экземпляр нестатического внутреннего класса, используя конструктор по умолчанию без аргументов в [Source: (PushbackInputStream);строка: 1, столбец: 2]]

JSON:

{ 
   "dsNome":"teste",
   "dsGenero":"Masculino",
   "dtNascimento":"2000-12-30T02:00:00.000Z",
   "idConvenio":16,
   "dsCep":"12321321",
   "dsEndereco":"teste",
   "dsEstado":"SC",
   "dsCidade":"",
   "dsBairro":"",
   "dsComplemento":"",
   "listaResponsavel":[ 
      { 
         "id":1,
         "dsNome":"teste",
         "nrCelular":"231321312213",
         "dsEmail":"",
         "dsGrau":"Pai"
      }
   ]
}

У меня есть те пустые методы конструктора, но со списком внутри моего класса, как я могу передать этот класс в качестве параметрак моему методу POST?

EDIT

Отсутствует статическое определение в моем классе TempCaptacao. Спасибо!

1 Ответ

0 голосов
/ 04 ноября 2019

Подумав об ошибке и о том, что вы опубликовали, я думаю, что вы делаете следующее:

public class TempCaptacao {
    // attributes etc
    public TempCaptacao() {}
    public class TempResponsavel { // inner class
        // attributes etc
        public class TempResponsavel() {}
    }
}

Не делайте этого. Определите классы в вашей модели отдельно, если только по причинам, связанным с ремонтопригодностью / удобочитаемостью / расширяемостью.

Я думаю, что JSON сможет десериализовать это, если вы удалите конструктор из вашего внутреннего класса, но вы собираетесьиспытывать любое количество проблем, делая что-то нестандартное, как это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...