Commit 55c743df authored by Christopher Cottier's avatar Christopher Cottier

Added validations for top level string fields, added error handler to controller

parent 0d0deb04
......@@ -21,6 +21,7 @@ repositories {
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web:2.5.3'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.12.4'
testImplementation 'org.springframework.boot:spring-boot-starter-test:2.5.3'
compileOnly 'org.projectlombok:lombok'
......
......@@ -3,16 +3,25 @@ package com.nisum.paymentvendorsimulator.creditcard.controllers;
import com.nisum.paymentvendorsimulator.creditcard.domain.dto.CreditCardRequest;
import com.nisum.paymentvendorsimulator.creditcard.domain.dto.CreditCardResponse;
import com.nisum.paymentvendorsimulator.creditcard.services.CreditCardService;
import com.nisum.paymentvendorsimulator.exceptions.BaseController;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.*;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import javax.validation.Valid;
import java.util.Set;
@RestController
@RequestMapping("/api/cc")
@CrossOrigin(origins = "*")
public class CreditCardController {
public class CreditCardController{
private static final Logger logger = LoggerFactory.getLogger(CreditCardController.class);
......@@ -20,9 +29,17 @@ public class CreditCardController {
CreditCardService ccService;
@PostMapping(value = "/authorize", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public CreditCardResponse authorize(@RequestBody CreditCardRequest ccRequest) {
public CreditCardResponse authorize(@Valid @RequestBody CreditCardRequest ccRequest) {
logger.info("this is CC controller");
//validationService.validatePostAuthorization(ccRequest);
return ccService.authorize(ccRequest);
}
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public ResponseEntity<String> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
System.out.println("in exception handler");
return new ResponseEntity<>("not valid due to validation error: " + e.getMessage(), HttpStatus.BAD_REQUEST);
}
}
......@@ -5,14 +5,21 @@ import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class CreditCardRequest {
CreditCardData card;
CreditCardAmount amount;
@NotBlank(message="reference can't be blank")
String reference;
@NotBlank(message="merchantAccount can't be blank")
String merchantAccount;
CreditCardAddress billingAddress;
// String returnUrl; // for Adyen payment, not classic integration, do we need?
......
......@@ -2,10 +2,13 @@ package com.nisum.paymentvendorsimulator.exceptions;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
import javax.validation.ConstraintViolationException;
import java.time.LocalDateTime;
@ControllerAdvice
......
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