当前位置: 首页 > 知识库问答 >
问题:

spring boot RequestBody获得null

陈弘厚
2023-03-14

我是新来spring boot的,当我从Postman那里获得RestController中的JSON时,我遇到了一个小问题。

当我从Postmat发送带有属性的请求时,RequestBody中总是为null。

这是我的Rest控制

@RestController
@RequestMapping(value="/api/enviar",produces = MediaType.APPLICATION_JSON_VALUE,
        headers = {"content-type=application/json"})
@RequiredArgsConstructor
@Slf4j
public class EnviarAdicionService {
    @Autowired
    private final EnviarAdicionUseCase enviarAdicionUseCase;
    @Autowired
    private final GuardarLogUseCase guardarLogUseCase;

    private final Gson gson = new Gson();
    private String _statusCode;
    private Date dateStart;


    @PostMapping
    public DatosAdicionResponse PostAdicionFondos(@RequestBody @Valid RequestAdicion requestAdicion){
          //PostMapping logic
          ...
    }
}

我的请求是这样的:

@Data
@NoArgsConstructor
public class RequestAdicion implements Serializable {
    private final static String regExpression = "\\{\\[sw\\.,ñÑ]\\+\\$}";
    @RequestHeaderValidation
    private RequestHeader Header;
    @CuentaValidation(NumeroIdentificacionName = "NumeroDocumentoCuentaOrigen", TipoIdentificacionName = "TipoDocumentoCuentaOrigen",
            TipoCuentaDepositosName = "TipoCuentaDepositoOrigen", NumeroCuentaDepositoName = "NumeroCuentaDepositoOrigen",
            EntidadCuentaName = "EntidadCuentaOrigen", TipoCuentaName = "TipoCuentaOrigen", NumeroCuentaName = "NumeroCuentaOrigen",
            CodigoFondoName = "CodigoFondoCuentaOrigen", EntidadCuentaDepositoName = "EntidadCuentaDepositoOrigen")
    private CuentaOrigen CuentaOrigen;
    @CuentaFondoValidation(TipoIdentificacionName = "TipoDocumentoCuentaDestino", NumeroIdentificacionFondoName = "NumeroDocumentoCuentaDestino",
            EntidadName = "EntidadCuentaDestino", CodigoFondoName = "CodigoFondoCuentaDestino",
            NumeroFondoInversionName = "NumeroFondoInversionCuentaDestino")
    private CuentaFondo CuentaDestino;
    @FormaDePagoValidation
    @Pattern(regexp = regExpression,message = "Valor no permitido. FormaDePago")
    private String FormaDePago;
    @ValorValidation
    private double ValorAdicion;
    @OficinaValidation
    private long Oficina;
    @CanalValidation
    @Pattern(regexp = regExpression,message = "Valor no permitido. Canal")
    private String Canal;
}

我用邮递员把这些属性

Headers
Content-Type: application/json

Body
{
    "Header": {
        "SystemId": "AW1371",
        "MessageId": "1234567890120006",
        "UserName": "autWakanda",
        "Destination": {
            "Name": null,
            "NameSpace": null,
            "Operation": null
        }
    },
    "CuentaOrigen": {
    "NumeroDocumentoCuentaOrigen": 8232166,
    "TipoDocumentoCuentaOrigen": "1",
    "TipoCuentaDepositoOrigen": "7",
    "NumeroCuentaDepositoOrigen": "40673760005",
    "EntidadCuentaOrigen": "00007",
    "TipoCuentaOrigen": "7",
    "NumeroCuentaOrigen": "40673760005",
    "CodigoFondoCuentaOrigen": "123"
  },
  "CuentaDestino": {
    "TipoDocumentoCuentaDestino": "1",
    "NumeroDocumentoCuentaDestino": 1360740,
    "NumeroFondoInversionCuentaDestino": "0021008106434090",
    "EntidadCuentaDestino": "00532",
    "CodigoFondoCuentaDestino": "21"
  },
  "FormaDePago": "72",
  "ValorAdicion": 133000.31,
  "Oficina": 3132,
  "Canal": "SVE"
}

我试图将第一个字符设置为小写,但它不起作用。

这是提出的例外情况:

Caused by: java.lang.NullPointerException: Cannot invoke "co.com.bancolombia.model.requestheader.RequestHeader.getSystemId()" because the return value of "co.com.bancolombia.api.models.RequestAdicion.getHeader()" is null

提前谢谢大家。

共有1个答案

郗丰
2023-03-14

尝试添加

@PostMapping
@ResponseBody
public DatosAdicionResponse PostAdicionFondos(@RequestBody @Valid 
RequestAdicion requestAdicion){
      //PostMapping logic
      ...
} code here
 类似资料:
  • 当所有映射定义被 org.hibernate.cfg.Configuration 解析后,应用程序必须获得一个用于构造 org.hibernate.Session 实例的工厂。这个工厂将被应用程序的所有线程共享: SessionFactory sessions = cfg.buildSessionFactory(); Hibernate 允许你的应用程序创建多个 org.hibernate.Ses

  • 关于如何从因特网上下载 Debian GNU/Linux 或者购买官方 Debian 光盘的信息,请参阅 发行网页。 Debian 镜像列表 包含完整的 Debian 官方镜像,您可以很容易找到最近的一个。 Debian 可以很容易地在安装之后升级。如果需要,安装步骤将帮助您建立系统, 使您可以在安装之后立即进行升级。

  • 关于如何从因特网上下载 Debian GNU/Linux 或者购买官方 Debian 光盘的信息,请参阅 发行网页。 Debian 镜像列表 包含完整的 Debian 官方镜像,您可以很容易找到最近的一个。 Debian 可以很容易地在安装之后升级。如果需要,安装步骤将帮助您建立系统, 使您可以在安装之后立即进行升级。

  • 主要内容:1. 访问帮助手册,2. 有关特定主题的帮助,3. 在手册中搜索帮助短语,4. 访问在线帮助Vim是功能丰富的编辑器,因此记住它的所有功能是有一定的困难的。 但是也不需要担心,因为总是可以寻求帮助。而这个帮助是由Vim本身提供的。 在本章中,将讨论以下主题内容 - 访问帮助手册 有关特定主题的帮助 在手册中搜索帮助短语 访问在线帮助 1. 访问帮助手册 Vim编辑器本身附带了帮助手册,它非常全面。 要访问帮助可执行以下命令 - 如下图所示: 2. 有关特定主题的帮助 帮助手册将显示有关

  • 为了请求访问令牌,客户端从资源所有者获得授权。授权表现为授权许可的形式,客户端用它请求访问令牌。OAuth定义了四种许可类型:授权码、隐式许可、资源所有者密码凭据和客户端凭据。它还提供了扩展机制定义其他许可类型。

  • 你可以从以下渠道获得关于pact的帮助: Google用户群组: https://groups.google.com/forum/ Gitter: 加入 https://gitter.im/realestate-com-au/pact 和 https://gitter.im/DiUS/pact-jvm 的交流