春季启动一些路径变量丢失,但返回404

问题描述:

我是一个初学者的启动。代码如下春季启动一些路径变量丢失,但返回404

@RestController 
@RequestMapping("/channel") 

public class ChannelController 
{ 
    @GetMapping("/getId/{participantId}/{walletType}") 
    Map<String,Object> getChannelId(@PathVariable Integer participantId , @PathVariable Integer walletType){ 
     return demoDAOImpl.getChannel(participantId, walletType); 
    } 
} 

当我打http://localhost:8080/channel/getId///,它返回默认白色标签错误页面,其中指出

有意外的错误(类型=未找到,状态= 404)。

这里我很困惑。我认为Spring MVC应该抛出一个MissingPathVariableException。为什么它响应404响应,找不到资源?

+0

我使用的引导1.5.6,THX – aeromic

+0

这是什么'PathVariableMissingException'你说的?为什么要抛出? –

+0

对于输入错误,MissingPathVariableException是一个Spring内置异常,“通常这意味着URI模板与方法参数中声明的路径变量名称不匹配。”(来自Spring原始注释)。 – aeromic

基础上,你的URL映射:你不能留空白,如 “///” 它必须是 “/数字/数字/

http://localhost:8080/channel/getId/0/0/

+0

这没问题,问题是如何捕获异常路径变量缺少返回友好的消息给客户端? – aeromic

+0

所以你应该搜索一下如何自定义spring-boot 404页面 –

+0

不行,希望赶上路径变量丢失异常,然后返回一些消息给客户端,thx – aeromic

我猜你在问什么是定制异常。那么你需要的是提供一个处理程序,你可以简单地扩展抽象类ResponseEntityExceptionHandler并覆盖handleMissingPathVariable方法。

一个例子:

@Override 
protected ResponseEntity<Object> handleMissingPathVariable(MissingPathVariableException ex, HttpHeaders headers, 
     HttpStatus status, WebRequest request) { 

    String error = ex.getParameter() + " parameter is missing"; 
    ErrorMessageHandler error =message(HttpStatus.BAD_REQUEST, ex.toString(), error) ; 
    return new ResponseEntity<Object>(error, new HttpHeaders(), HttpStatus.BAD_REQUEST); 

}