2016-05-29 1 views
0

私は春、春の起動と春の休憩のコントローラを使用して、私はエラーで始まります。私のサービスでエラーを管理してクライアントに送信しました

私のコントローラ

@RequestMapping(value = "/members/{memberId}/creditcard", method = RequestMethod.POST) 
public void saveCreditCard(@PathVariable("memberId") Long memberId, @RequestBody CreditCardInfoDto creditCardInfo) { 
    try { 
     paymentService.saveCreditCard(creditCardInfo); 
    } catch(Exception e) {} 
} 

@Override 
public Long saveCreditCard(CreditCardInfoDto creditCardInfo) throws Exception { 
    Member member = null; 

    if (creditCardInfo.getMemberId() != null) { 
     member = memberRepository.findOne(creditCardInfo.getMemberId()); 
    } 

    List <PaymentGatewayConfig> paymentGateways = paymentGatewayConfigRepository.findAll(); 

    if (paymentGateways != null && !paymentGateways.isEmpty()) { 

     PaymentGatewayConfig paymentGateway = paymentGateways.get(0); 
     String paymentGatewayKey = null; 

     if (member != null) { 
      paymentGatewayKey = member.getPaymentGatewayKey(); 
     } 

     ResolveData resdata = null; 
     ResolverReceipt resreceipt = null; 

     try { 

      if (paymentGatewayKey == null) { 

       ResAddCC resAddCC = new ResAddCC(creditCardInfo.getCreditCard(), creditCardInfo.getDateExpiration(), "7"); 

       //resAddCC.setAvsInfo(avsCheck); 
       ResolverHttpsPostRequest mpgReq = new ResolverHttpsPostRequest(paymentGateway.getHost(), paymentGateway.getStoreId(), paymentGateway.getApiToken(), resAddCC); 
       resreceipt = mpgReq.getResolverReceipt(); 
       resdata = resreceipt.getResolveData(); 

       member.setPaymentGatewayKey(resreceipt.getDataKey()); 
      } else { 

       ResUpdateCC resUpdateCC = new ResUpdateCC(member.getPaymentGatewayKey()); 
       resUpdateCC.setPan(creditCardInfo.getCreditCard()); 
       resUpdateCC.setExpdate(creditCardInfo.getDateExpiration()); 

       ResolverHttpsPostRequest mpgReq = new ResolverHttpsPostRequest(paymentGateway.getHost(), paymentGateway.getStoreId(), paymentGateway.getApiToken(), resUpdateCC); 

       resreceipt = mpgReq.getResolverReceipt(); 
       resdata = resreceipt.getResolveData(); 
      } 
     } catch (Exception e) { 
      log.error("saveCreditCard: " + member.getMemberId() + "ResolverHttpsPostRequest error"); 
     } 

     if (resdata != null) { 
      //success 
      if (Boolean.valueOf(resreceipt.getComplete()) && !Boolean.valueOf(resreceipt.getTimedOut())) { 
       member.setPaymentGatewayKey(resreceipt.getDataKey()); 
       memberRepository.save(member); 
       Operation operation = createOperation(resreceipt); 
       operationRepository.save(operation); 
      } else { 
       Operation operation = createOperation(resreceipt); 
       operationRepository.save(operation); 
       //payment refused 
       log.error("saveCreditCard: " + member.getMemberId() + " payment refused error code: " + resreceipt.getResponseCode()); 
       throw new Exception("Payment refused"); 
      } 
     } 
    } 
    return 1 l; 
} 

支払いあればサービスでは、コールがResolverHttpsPostRequest

に行われているときにエラーが発生することが、私は例外をThowさんそれは拒否されます。

エラーを管理する良い方法はありますか?

これらのエラーをクライアント(ウェブ)に送信するにはどうすればよいですか?

+0

からここでのコードの一部であり、成功のようないくつかのサービスの結果を送信するためにリクエストヘッダーを使用できない、など

を警告します例外ではありません。それはクライアント側の問題であるため、いくつかのタイプの4xxエラーを返す必要があります。おそらく400または402です。 –

+0

saveCreditCardはtrueまたはfalseを返します...支払いが成功したかどうかを指定しますか? –

+0

これは実装の詳細です。たぶんsaveCreditCardはそのまま動作しますが、残りのサービスラッパーは例外をキャッチしてエラー応答にします。あるいは、saveCreditCardは引き続きLongを返すだけでなく、渡されたValidationResultsオブジェクトなどをSpringで行われているように更新します。重要なのは、適切なHTTPステータスコードを使用して、有効なHTTP応答を生成して返す必要があることです。 –

答えて

1

org.springframework.http.ResponseEntityを使用できます。 jHipsterは、それを実装するための良い例のプロジェクトです。彼らは支払いを拒否すると、正常に起こることができるものであれば、それはおそらくだjHipster sample project

@RequestMapping(value = "/operations", 
     method = RequestMethod.POST, 
     produces = MediaType.APPLICATION_JSON_VALUE) 
    public ResponseEntity<Operation> createOperation(@Valid @RequestBody Operation operation) throws URISyntaxException { 
     log.debug("REST request to save Operation : {}", operation); 
     if (operation.getId() != null) { 
      return ResponseEntity.badRequest().headers(HeaderUtil.createFailureAlert("operation", "idexists", "A new operation cannot already have an ID")).body(null); 
     } 
     Operation result = operationRepository.save(operation); 
     return ResponseEntity.created(new URI("/api/operations/" + result.getId())) 
      .headers(HeaderUtil.createEntityCreationAlert("operation", result.getId().toString())) 
      .body(result); 
    } 
関連する問題