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