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さんそれは拒否されます。
エラーを管理する良い方法はありますか?
これらのエラーをクライアント(ウェブ)に送信するにはどうすればよいですか?
からここでのコードの一部であり、成功のようないくつかのサービスの結果を送信するためにリクエストヘッダーを使用できない、など
を警告します例外ではありません。それはクライアント側の問題であるため、いくつかのタイプの4xxエラーを返す必要があります。おそらく400または402です。 –
saveCreditCardはtrueまたはfalseを返します...支払いが成功したかどうかを指定しますか? –
これは実装の詳細です。たぶんsaveCreditCardはそのまま動作しますが、残りのサービスラッパーは例外をキャッチしてエラー応答にします。あるいは、saveCreditCardは引き続きLongを返すだけでなく、渡されたValidationResultsオブジェクトなどをSpringで行われているように更新します。重要なのは、適切なHTTPステータスコードを使用して、有効なHTTP応答を生成して返す必要があることです。 –