无法映射从使用lambda函数部署的应用程序获取的错误

时间:2018-02-25 17:41:03

标签: spring-boot aws-lambda aws-api-gateway swagger-ui swagger-2.0

我正在使用lambda函数部署springboot应用程序。请找到以下样本。

控制器

@RequestMapping(method = RequestMethod.GET, value = "/bugnlow/findByRegionId/{regionId}", produces = "application/json")
public ResponseEntity<List<Bunglow>> findAllBunglowsByRegionId(@PathVariable int regionId, @RequestParam int page, @RequestParam int size) {
Page<Bunglow> bunglows = bunglowsService.findAllBunglowsByRegionId(regionId, page, size);
if (bunglows.getContent().size() == 0){
    return ResponseEntity.notFound().build();
}
return ResponseEntity.ok(bunglows.getContent());
}

服务

if the "regionid" is invalid, I am throwing a runtime exception that contains message "region id is invalid".
throw new RuntimeException(Constant.INVALID_REGION_ID);

通过发送无效的区域ID,我在本地测试时收到以下响应。

[1]{
  "timestamp": 1519577956092,
  "status": 500,
  "error": "Internal Server Error",
  "exception": "java.lang.RuntimeException",
  "message": "Region Id is invalid",
  "path": "/***/bugnlow/findByRegionId/343333"
}

我使用lambda函数在应用程序AWS上部署。当我将请求从AWS API网关发送到已部署的应用程序时,我收到以下错误的Amazon响应标头。

[2] Request: /bugnlow/findByRegionId/342324?page=0&size=5 Status: 500 Latency: 166 ms Response Body
{  "message": "Internal server error" }

在特定端点中,已为错误500配置了集成响应。但未使用将内容类型配置为application / json的模板。

我可以通过

在控制器类中设置它来获取本地化错误
ResponseEntity<?> 

但是,List Bunglow不会在Swagger UI中显示为示例响应值。

  1. 我需要从AWS控制台获得准确的响应[1]。怎么做。
  2. 如何使用Http状态400(错误请求)发送“Region id is invalid”而不是错误500.
  3. 如果有人可以帮助我,这是一个很好的帮助。

    由于

1 个答案:

答案 0 :(得分:0)

我可以通过使用

创建一个类来解决我的问题
@ControllerAdvice

并使用

处理异常
@ExceptionHandler

我需要验证并回复错误的每一点,我创建了一个自定义异常&#34; BunglowCustomExceptionResponse&#34;并在Advice类&#34; BunglowControllerAdvice&#34;中捕获异常。然后发送带有错误请求响应的异常消息的响应,如下所示。

@ControllerAdvice
public class BunglowControllerAdvice {
    @ExceptionHandler
    public ResponseEntity handleCustomBunglowException(Exception e){
        logger.info("***Exception occurred  :" + e.getLocalizedMessage());
        return new ResponseEntity<BunglowCustomExceptionResponse>(new 
BunglowCustomExceptionResponse(e.getLocalizedMessage()), HttpStatus.BAD_REQUEST);
    }
}

然后,我能够获得类似于下面的预期响应,错误的请求状态代码为400。

{"responseMessage": "error message"}

我不知道这是最好的方法,但能够解决我的问题。无论如何,非常感谢您的观看,并试图帮助我。