gpt4 book ai didi

java - Spring boot RequestBody 越来越空

转载 作者:行者123 更新时间:2023-12-05 04:52:04 24 4
gpt4 key购买 nike

我是 Spring Boot 的新手,当我从 Postman 在我的 RestController 中获取 JSON 时遇到了一个小问题。

当我从 Postmat 发送带有其属性的请求时,它总是在 RequestBody 中变为空。

这是我的休息 Controller

@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
...
}
}

我的RequestAdicion是这样的:

@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;
}

我在 Postman 中发送这些属性

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

提前谢谢大家。

编辑:我解决了为每个字段设置注解@JsonProperty 并为每个模型创建一个 NoArgsConstructor 初始化没有值的变量和类中的注解@AllArgsConstructor 的问题。

最佳答案

我只是出于不同的原因遇到了同样的问题,所以我添加了这个简短的说明,也许可以帮助其他人。我不明白为什么我的 Controller 参数被注释为 @RequestBody 时全是空白/空的。已检查 Content-Type: application/json。

在意识到我的 IDE 为该注释类选择了完全错误的导入之前,我在这上面浪费了很多时间。所以只要确保你有

import org.springframework.web.bind.annotation.*;

而不是您的导入中的其他 RequestBody 类。

关于java - Spring boot RequestBody 越来越空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66602167/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com