Java Spring GetMapping注释异常
控制器类中有以下方法:Java Spring GetMapping注释异常,java,spring,Java,Spring,控制器类中有以下方法: @GetMapping("{id:" + REGEXP + "}") @ResponseBody public SomeObject getById(@PathVariable UUID id) { return someObjectService.getById(id)); } REGEXP是一个简单的正则表达式字符串。在someObjectService中,getById方法处理id找不到对象并引发异常的情况。对于此类
@GetMapping("{id:" + REGEXP + "}")
@ResponseBody
public SomeObject getById(@PathVariable UUID id) {
return someObjectService.getById(id));
}
REGEXP是一个简单的正则表达式字符串。在someObjectService中,getById方法处理id找不到对象并引发异常的情况。对于此类情况,还有一个异常处理程序类用于自定义错误响应:
@ExceptionHandler({ResourceNotFoundException.class})
@ResponseStatus(HttpStatus.NOT_FOUND)
@ResponseBody
public CustomErrorResponse handleNotFoundCase (ResourceNotFoundException exception) {
CustomErrorResponse customerErrorResponse = new CustomErrorResponse();
// filling CustomErrorResponse with specific data using 'exception'
return customerErrorResponse;
}
因此,当我使用一些不存在的id测试getById
时,它通过了REGEXP检查,预期结果=实现结果:404,错误的json主体的结构为CustomErrorResponse
(来自处理程序)
但是,当我对id执行相同操作时,它没有通过REGEXP检查-404 occurrens,但是错误的json主体是默认的(引导),它没有CustomErrorResponse
结构
问题是:当
@GetMapping(“{id:“+REGEXP+”}”)
中的id没有通过REGEXP检查时,会引发什么样的异常,以及在哪里(为了进一步适当的处理)?为什么要尝试在get映射中发布json?
在这种情况下,您需要使用localhost:8080/yourApp/entity/{id:10}
这真的是你需要的而不是localhost:8080/yourApp/entity/10吗
请查看此页面,了解如何设计REST端点:
关于您的问题-在这种情况下,您不能使用验证。您需要为此字段添加自定义验证器
请在此处找到“自定义验证器”部分:
为什么要在get映射中发布json? 在这种情况下,您需要使用localhost:8080/yourApp/entity/{id:10} 这真的是你需要的而不是localhost:8080/yourApp/entity/10吗 请查看此页面,了解如何设计REST端点: 关于您的问题-在这种情况下,您不能使用验证。您需要为此字段添加自定义验证器 请在此处找到“自定义验证器”部分:
如果您想创建正则表达式来检查uuid是否正确,那么这是不必要的,并且
@GetMapping("/{id}")
public SomeObject getById(@PathVariable UUID id) {
我将证实这一点
另一方面,如果您对此有比使用模式验证器更严格的要求:
@RestController
@Validated
public class Ctrl {
// ...
@GetMapping("/{id}")
public String getById(@Pattern(regexp = REGEXP) @PathVariable String id) {
return someObjectService.getById(UUID.fromString(id)));
}
}
注意,模式验证器不能在UUID类型上工作,所以您必须手动将字符串转换为UUID
如果您想创建正则表达式来检查uuid是否正确,那么可以在中阅读有关验证的更多信息,这是不必要的,并且
@GetMapping("/{id}")
public SomeObject getById(@PathVariable UUID id) {
我将证实这一点
另一方面,如果您对此有比使用模式验证器更严格的要求:
@RestController
@Validated
public class Ctrl {
// ...
@GetMapping("/{id}")
public String getById(@Pattern(regexp = REGEXP) @PathVariable String id) {
return someObjectService.getById(UUID.fromString(id)));
}
}
注意,模式验证器不能在UUID类型上工作,所以您必须手动将字符串转换为UUID
您可以在中阅读有关验证的更多信息