Commit cadc9755 authored by Christopher Cottier's avatar Christopher Cottier

Added ErrorModel for error reporting, improved error messages

parent 040b36df
...@@ -4,6 +4,7 @@ import com.nisum.paymentvendorsimulator.creditcard.domain.dto.CreditCardRequest; ...@@ -4,6 +4,7 @@ import com.nisum.paymentvendorsimulator.creditcard.domain.dto.CreditCardRequest;
import com.nisum.paymentvendorsimulator.creditcard.domain.dto.CreditCardResponse; import com.nisum.paymentvendorsimulator.creditcard.domain.dto.CreditCardResponse;
import com.nisum.paymentvendorsimulator.creditcard.services.CreditCardService; import com.nisum.paymentvendorsimulator.creditcard.services.CreditCardService;
import com.nisum.paymentvendorsimulator.exceptions.BaseController; import com.nisum.paymentvendorsimulator.exceptions.BaseController;
import com.nisum.paymentvendorsimulator.exceptions.ErrorModel;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -38,13 +39,19 @@ public class CreditCardController{ ...@@ -38,13 +39,19 @@ public class CreditCardController{
@ExceptionHandler(MethodArgumentNotValidException.class) @ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST) @ResponseStatus(HttpStatus.BAD_REQUEST)
public ResponseEntity<List<String>> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { public ResponseEntity<ErrorModel> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
System.out.println("in exception handler"); ErrorModel errorModel = new ErrorModel();
List<String> errors = e.getAllErrors().stream() List<String> errors = e.getAllErrors().stream()
.map(error -> error.getDefaultMessage()) .map(error -> error.getDefaultMessage())
.collect(Collectors.toList()); .collect(Collectors.toList());
return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST); errorModel.setDeveloperMessage("Bad Request");
errorModel.setUserMessage("Errors: " + errors.toString());
errorModel.setErrorCode(HttpStatus.BAD_REQUEST.value());
errorModel.setMoreInfo("/swagger-ui/index.html#/credit-card-controller/authorizeUsingPOST_1");
return new ResponseEntity<>(errorModel, HttpStatus.BAD_REQUEST);
} }
} }
...@@ -14,10 +14,10 @@ import javax.validation.constraints.Pattern; ...@@ -14,10 +14,10 @@ import javax.validation.constraints.Pattern;
@NoArgsConstructor @NoArgsConstructor
public class CreditCardAmount { public class CreditCardAmount {
@Pattern(regexp = "\\d+\\.\\d{2}", message="Value must be at dollar and cents value separated by '.'") @Pattern(regexp = "\\d+\\.\\d{2}", message="Amount value must be at dollar and cents value separated by '.'")
String value; String value;
@NotBlank(message = "currency cannot be left blank") @NotBlank(message = "Amount currency cannot be left blank")
String currency; String currency;
} }
...@@ -14,19 +14,19 @@ import javax.validation.constraints.Pattern; ...@@ -14,19 +14,19 @@ import javax.validation.constraints.Pattern;
@NoArgsConstructor @NoArgsConstructor
public class CreditCardData { public class CreditCardData {
@Pattern(regexp = "\\d{16}", message = "Credit card must be 16 digits") @Pattern(regexp = "\\d{16}", message = "Credit card number must be 16 digits")
String number; String number;
@Pattern(regexp = "\\d{2}", message = "Credit card must be 2 digits") @Pattern(regexp = "\\d{2}", message = "Credit card expiry month must be 2 digits")
String expiryMonth; String expiryMonth;
@Pattern(regexp = "\\d{4}", message = "Credit card must be 4 digits") @Pattern(regexp = "\\d{4}", message = "Credit card expiry year must be 4 digits")
String expiryYear; String expiryYear;
@Pattern(regexp = "\\d{3}", message = "cvc must be 3 digits") @Pattern(regexp = "\\d{3}", message = "Credit card cvc must be 3 digits")
String cvc; String cvc;
@NotBlank(message = "holderName cannot be left blank") @NotBlank(message = "Credit card holderName cannot be left blank")
String holderName; String holderName;
} }
package com.nisum.paymentvendorsimulator.exceptions;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ErrorModel {
@JsonProperty("developerMessage")
private String developerMessage = null;
@JsonProperty("userMessage")
private String userMessage = null;
@JsonProperty("errorCode")
private Integer errorCode = null;
@JsonProperty("moreInfo")
private String moreInfo = null;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment