Spring boot et les erreur
salut
j'utilse spring boot et spring 4.2. dans une architecture reste et je cherche comment gérer les serveur.
actuellement, le rest controller appelle la couche service.
Code:
1 2 3 4 5
|
@RequestMapping(value = "/members/{memberId}/contracts/{contractId}/payments", method = RequestMethod.POST)
public void generatePayments(@PathVariable("memberId") Long memberId, @PathVariable("contractId") Long contractId, @RequestBody ContractDto contractDto) {
paymentService.generatePayment(contractDto);
} |
il retourne rien actuellement, surement un changement doit être fait pour retourner une erreur?
Des erreurs peuvent survenir au niveau de la couche service qui fait appel à un repository (jpa, implémentation hibernate).
Au niveau de la gestion des erreurs que dois-je faire?
mettre des try catch dans processPayment, processCreditCardPayment et chargeMemberCreditCard?
en mettre un que dans processPayment?
Comment retourner cette erreur au client web?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
@Override
public void processPayment(List<Long> paymentsId, PaymentModeEnum paymentMode) {
if (PaymentModeEnum.CREDITCARD == paymentMode) {
List<Payment> payments = paymentRepository.findByPaymentIdIn(paymentsId);
processCreditCardPayment(payments);
} else {
paymentRepository.setPaymentStatus(paymentsId, StatusEnum.COMPLETE, LocalDate.now());
}
}
private void processCreditCardPayment(List<Payment> payments) {
List<PaymentGatewayConfig> paymentGateways = paymentGatewayConfigRepository.findAll();
if (paymentGateways != null && !paymentGateways.isEmpty()) {
PaymentGatewayConfig paymentGateway = paymentGateways.get(0);
String crypt_type = "7";
for (Payment payment : payments) {
ResolverReceipt resreceipt = chargeMemberCreditCard(payment, crypt_type, paymentGateway);
Operation operation = createOperation(resreceipt);
List<Operation> operations = null;
if (payment.getOperations() == null) {
operations = new ArrayList<>();
}
operations.add(operation);
payment.setDate(LocalDate.now());
payment.setOperations(operations);
paymentRepository.save(payment);
}
}
}
private ResolverReceipt chargeMemberCreditCard(Payment payment, String crypt_type, PaymentGatewayConfig paymentGateway) {
ResolverReceipt resreceipt = null;
Member member = payment.getContract().getMember();
ResPurchaseCC resPurchaseCC = new ResPurchaseCC(member.getPaymentGatewayKey(), payment.getPaymentId().toString(), member.getMemberId().toString(), payment.getPrice().toString(), crypt_type);
ResolverHttpsPostRequest mpgReq = new ResolverHttpsPostRequest(paymentGateway.getHost(), paymentGateway.getStoreId(), paymentGateway.getApiToken(), resPurchaseCC);
try{
resreceipt = mpgReq.getResolverReceipt();
ResolveData resdata = resreceipt.getResolveData();
if (resreceipt != null && resreceipt.getResponseCode() != null && Integer.getInteger(resreceipt.getResponseCode()) < 50) {
payment.setStatus(StatusEnum.COMPLETE);
} else {
payment.setStatus(StatusEnum.FAIL);
}
catch (Exception e){
log.error("ChargeMemberCreditCard : problème pour traitement le paiement de la carte de crédit", e);
}
return resreceipt;
} |
je cherche donc les bonnes pratiques avec spring boot.
merci