【问题标题】:How to receive a non-entity class as param on POST method?如何在 POST 方法中接收非实体类作为参数?
【发布时间】:2019-11-04 14:32:48
【问题描述】:

控制器方法:

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

参数类:

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

        }

子参数类:

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

        }

当 Angular 调用这个方法时,传递一个 JSON(如下)我的 springs 会返回这个错误:

.w.s.m.s.DefaultHandlerExceptionResolver : 已解决 [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construction instance of com.spin.spincare.controller.MovAtendimentoCaptacaoController$TempCaptacao (虽然至少有一个 Creator 存在): 只能使用默认实例化非静态内部类, 无参数构造函数;嵌套异常是 com.fasterxml.jackson.databind.exc.MismatchedInputException: 无法构造 com.spin.spincare.controller.MovAtendimentoCaptacaoController$TempCaptacao 的实例(尽管至少存在一个 Creator):只能使用默认的无参数构造函数来实例化非静态内部类 在 [来源:(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 方法?

编辑

我的 TempCaptacao 类缺少静态定义。 谢谢!

【问题讨论】:

  • 这个错误听起来你需要创建参数化构造函数
  • 1.你能提供格式化的JSON吗? 2、你还有其他的构造函数吗? Java 默认提供空的。
  • @MoxxiManagarm 你能给我发个例子吗?
  • @Noskol 主题已更新
  • 您确实需要发布所有构造函数的完整代码。它不是在抱怨这份名单。它抱怨它无法构造父类。可能是因为您将子类嵌套在父类中(?)。用您发布的代码看不到。

标签: java angular spring-boot jpa


【解决方案1】:

在考虑了错误和您发布的内容之后,我认为您正在做的是:

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

不要那样做。如果仅出于可维护性/可读性/可扩展性的原因,请单独定义模型中的类。

如果您从内部类中删除构造函数,我认为 JSON 应该能够反序列化它,但是您会遇到很多问题,如执行此类非标准操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 2015-01-20
    • 2019-10-20
    相关资源
    最近更新 更多