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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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