Чтобы продолжить, вот как вы можете реализовать пользовательскую проверку.
Добавить проверку для выдачи исключения, когда для параметра IssueType задано значение MIN, а код муниципалитета пуст / ноль.
@RequestMapping(method = RequestMethod.POST, value = ProductionResponse.URL, produces = JWSMessageConverter.JWS_MEDIA_TYPE_VALUE)
@ResponseBody
public ResponseEntity<ProductionResponse> richiestaProduzione(@RequestParam("issuerType") String issuerType,
@RequestParam("issuerCode") String issuerCode, @RequestParam("procedureId") String procedureId,
@RequestBody ProductionRequestResource requestBody) {
if (LOGGER.isDebugEnabled())
LOGGER.debug("POST " + ProductionResponse.URL);
if("MIN".equals(issuerType) && StringUtils.isEmpty(requestBody.getIssuerMunicipalityCode())) {
throw new IllegalArgumentException("IssuerMuncipalityCode can't be null when IssuerType is MIN");
}
try {
ProductionResponse response = produzioneService.richiestaProduzione(requestBody);
return ResponseEntity.ok(response);
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
return ResponseEntity.badRequest().body(ProductionResponse.ko(requestBody, e.getMessage(), requestBody.getNun()));
}
}
Реализовать обработчик исключений, чтобы перехватывать исключения и создавать тело ответа на основе типов исключений. Исключительная ситуация InvalidArgumentSuppliedException будет перехвачена обработчиком исключений ниже. Обработчик исключений - это лучшая практика для обработки исключений в отдельном компоненте.
@ControllerAdvice
public class ScnSchedulerExceptionHandler {
@ExceptionHandler(InvalidArgumentSuppliedException.class)
public final ResponseEntity<Object> handleInvalidArgException(Exception ex) {
ErrorResponseDTO errorDTO = new ErrorResponseDTO();
errorDTO.setMessage(ex.getMessage());
return new ResponseEntity<>(errorDTO, HttpStatus.NOT_ACCEPTABLE);
}
@ExceptionHandler(Exception.class)
public final ResponseEntity<Object> handleAllExceptions(Exception ex) {
ErrorResponseDTO errorDTO = new ErrorResponseDTO();
errorDTO.setMessage("Internal server error occurred.");
return new ResponseEntity<>(errorDTO, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
В обработчике исключений оберните сообщения об ошибках в объект pojo.
public class ErrorResponseDTO {
private String errorMessage;
}