How can I solve the error presented?
this is my service :
@Service
public class EmisionPesoService {
@Autowired
private RestTemplate restTemplate;
private final String URL = "https://desa-dapinstituciones.bancoestado.cl/api-gtw-emision-pesos/dap-min-pub/emision-pesos";
public EmisionPesosDto postEmisionPesos(EmisionPesosBody emisionPesosBody, String accessToken) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("Authorization", "Bearer " + accessToken);
HttpEntity<EmisionPesosBody> entity = new HttpEntity<>(emisionPesosBody, headers);
ResponseEntity<EmisionPesosDto> response = restTemplate.exchange(URL, HttpMethod.POST, entity, EmisionPesosDto.class);
return response.getBody();
}
}
this is my controller:
@RestController
public class EmisionPesoController {
@Autowired
private EmisionPesoService emisionPesoService;
@PostMapping(value = "/emision-pesos", consumes = "application/json", produces = "application/json")
public EmisionPesosDto emisionPesos(@RequestHeader("Authorization") String accessToken,
@RequestBody Integer CodigoMoneda,
@RequestBody Integer Plazo,
@RequestBody BigDecimal MontoDeposito,
@RequestBody String IndicadorRenovacion,
@RequestBody Integer RutCliente,
@RequestBody String DigitoRutCliente,
@RequestBody Long NumCuentaCorriente,
@RequestBody String RUC,
@RequestBody String RUE,
@RequestBody String FiscaliaRegional,
@RequestBody String FiscaliaZonal,
@RequestBody Integer RutUsuarioEmisor,
@RequestBody String DigitoRutUsuarioEmisor) {
EmisionPesosBody emisionPesosBody = new EmisionPesosBody();
emisionPesosBody.setCodigoMoneda(CodigoMoneda);
emisionPesosBody.setPlazo(Plazo);
emisionPesosBody.setMontoDeposito(MontoDeposito);
emisionPesosBody.setIndicadorRenovacion(IndicadorRenovacion);
emisionPesosBody.setRutCliente(RutCliente);
emisionPesosBody.setDigitoRutCliente(DigitoRutCliente);
emisionPesosBody.setNumCuentaCorriente(NumCuentaCorriente);
emisionPesosBody.setRUC(RUC);
emisionPesosBody.setRUE(RUE);
emisionPesosBody.setFiscaliaRegional(FiscaliaRegional);
emisionPesosBody.setFiscaliaZonal(FiscaliaZonal);
emisionPesosBody.setRutUsuarioEmisor(RutUsuarioEmisor);
emisionPesosBody.setDigitoRutUsuarioEmisor(DigitoRutUsuarioEmisor);
return emisionPesoService.postEmisionPesos(emisionPesosBody , accessToken);
}
}
And the corresponding data
@Data
public class EmisionPesosBody {
private Integer CodigoMoneda;
private Integer Plazo;
private BigDecimal MontoDeposito;
private String IndicadorRenovacion;
private Integer RutCliente;
private String DigitoRutCliente;
private Long NumCuentaCorriente;
private String RUC;
private String RUE;
private String FiscaliaRegional;
private String FiscaliaZonal;
private Integer RutUsuarioEmisor;
private String DigitoRutUsuarioEmisor;
}
@Data
public class EmisionPesosDto {
private int code;
private String message;
private EmisionPesosPayloadDto payload;
}
@Data
public class EmisionPesosPayloadDto {
private String CodProducto;
private String NumOperacion;
private Integer CodigoMoneda;
private String CodSubProducto;
private String Plazo;
private Integer FechaEmision;
private Integer FechaVencimiento;
private BigDecimal Monto;
private BigDecimal MontoOrigen;
private BigDecimal TasaBase;
private BigDecimal TasaPeriodo;
private BigDecimal MontoOrgIntPeriodo;
private BigDecimal MontoFinalOrg;
private String RUC;
private String RUE;
private String FiscaliaRegional;
private String FiscaliaZonal;
}
I am working with rest template and the application requests a client certificate that loads correctly, the endpoints need a header with an access token which I obtain from another endpoint, which works correctly.
My main problem is that when trying to consume this endpoint, which are the resources, it shows me this error:
Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type java.lang.Integer from Object value (token JsonToken.START_OBJECT); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type java.lang.Integer from Object value (token JsonToken.START_OBJECT) at [Source: (org.springframework. util.StreamUtils$NonClosingInputStream); line: 1, column: 2]]
By leaving my controller like this, it returns a response that there are invalid parameters and returns null
@PostMapping(value = "/emision-pesos", consumes = "application/json", produces = "application/json")
public ResponseEntity<EmisionPesosDto> emisionPesos(@RequestHeader("Authorization") String accessToken,
@RequestBody EmisionPesosBody emisionPesosBody){
EmisionPesosDto response = emisionPesoService.postEmisionPesos(emisionPesosBody, accessToken);
return ResponseEntity.ok(response);
}
{ "code": 400, "message": "Parámetro inválido", "payload": { "fiscaliaRegional": null, "ruc": null, "rue": null, "fiscaliaZonal": null, "codigoMoneda": null, "plazo": null, "codSubProducto": null, "fechaVencimiento": null, "montoOrgIntPeriodo": null, "tasaPeriodo": null, "numOperacion": null, "monto": null, "montoFinalOrg": null, "codProducto": null, "fechaEmision": null, "montoOrigen": null, "tasaBase": null } }
Swagger Documentation:
Request
{
"CodigoMoneda": 999,
"Plazo": 7,
"MontoDeposito": 105000,
"IndicadorRenovacion": "S",
"RutCliente": 61935400,
"DigitoRutCliente": "1",
"NumCuentaCorriente": 23909000386,
"RUC": "000022010212467",
"RUE": "000000012229907",
"FiscaliaRegional": "005",
"FiscaliaZonal": "000500",
"RutUsuarioEmisor": 12878658,
"DigitoRutUsuarioEmisor": "9"
}
Response
{
"CodigoMoneda": 999,
"Plazo": 7,
"MontoDeposito": 105000,
"IndicadorRenovacion": "S",
"RutCliente": 61935400,
"DigitoRutCliente": "1",
"NumCuentaCorriente": 23909000386,
"RUC": "000022010212467",
"RUE": "000000012229907",
"FiscaliaRegional": "005",
"FiscaliaZonal": "000500",
"RutUsuarioEmisor": 12878658,
"DigitoRutUsuarioEmisor": "9"
}
That is what I have in the documentation that the client gave me
The version emisionPesos(@RequestHeader("Authorization") String accessToken, @RequestBody EmisionPesosBody emisionPesosBody) is correct.
The other version with multiple arg annotated as @RequestBody is wrong - only one arg can be @RequestBody. The first arg is an integer so the deserialiser, which gets an object start, ie ”{“ and not an integer, complains.
You will have to check the api definition for desa-dapinstituciones.bancoestado.cl to sort out the missing parameters. Do you have a swagger doc for the POST to api-gtw-emision-pesos/dap-min-pub/emision-pesos. ?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With