我在Java/Spring中有以下Rest控制器。将检查约束的验证。然而,这些都是在到达我的“bar”方法主体之前完成的。如何处理违规案件?我可以定制400个响应主体吗?
@RestController
@RequestMapping("foo")
public class FooController {
@RequestMapping(value = "bar", method = RequestMethod.POST)
public ResponseEntity<Void> bar(@RequestBody @Valid Foo foo) {
//body part
return ResponseEntity.status(HttpStatus.OK).build();
}
}
您可以将BindingResult作为末尾的参数添加到方法签名中。
@RequestMapping(value = "bar", method = RequestMethod.POST)
public ResponseEntity<Void> bar(@RequestBody @Valid Foo foo, BindingResult bindingResult)
{
if (bindingResult.hasErrors()) {
//do something if errors occured
return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
}
//body part
return ResponseEntity.status(HttpStatus.OK).build();
}
您应该使用controllerAdvice,下面是一个示例(在kotlin中):
@ControllerAdvice
open class ExceptionAdvice {
@ExceptionHandler(MethodArgumentNotValidException::class)
@ResponseBody
@ResponseStatus(HttpStatus.BAD_REQUEST)
open fun methodArgumentNotValidExceptionHandler(request: HttpServletRequest, e: MethodArgumentNotValidException): ErrorDto {
val errors = HashMap<String, String>()
for (violation in e.bindingResult.allErrors) {
if (violation is FieldError) {
errors.put(violation.field, violation.defaultMessage)
}
}
return ErrorDto(errors)
}
@ExceptionHandler(BindException::class)
@ResponseBody
@ResponseStatus(HttpStatus.BAD_REQUEST)
open fun bindExceptionHandler(request: HttpServletRequest, e: BindException): ErrorDto {
val errors = HashMap<String, String>()
for (violation in e.bindingResult.allErrors) {
if (violation is FieldError) {
errors.put(violation.field, violation.defaultMessage)
}
}
return ErrorDto(errors)
}
}
它允许处理控制器引发的异常,包括验证异常。
但这不是有效的语法。 我是否必须分别检查每一个密钥才能处理无的情况?
我正在使用OkHttpClient向网站的网页url发送请求,并通过以下方法存储它提供的cookie,我仅从stackoverflow获得该方法。 有必要存储cookie,否则网站会将请求重定向到超时页面。 然后,我看到页面的html来检查我是否到达了正确的网址。 现在,我以类似于网址“www.example.com/loginPage”的方式制作另一个请求变量,并尝试查看html,但它将我重定向
我该怎么做?
在Spring的上个版本中,用户需要在web应用的上下文中定义一个或多个的HandlerMappingbean,用以将进入容器的web请求映射到合适的处理器方法上。允许在控制器上添加注解后,通常你就不必这么做了,因为RequestMappingHandlerMapping类会自动查找所有注解了@RequestMapping的@Controller控制器bean。同时也请知道,所有继承自Abstra
很抱歉再次问这种问题,但我无法通过查看其他线程和Spring doc来解决我的问题。 我正在使用maven的3.1.0.RELEASE,并尝试使用注释和java配置。 以下是我的web.xml: 这是我的档案web-application-config.xml. 我有两个类。第一个配置视图解析器 第二个定义我的控制器: 根据我的配置,我想一切都应该指向我的home()函数。然而,事实并非如此,以下
我有一个在数据库上运行查询的API。由于查询执行时间可能很长,比如3分钟到10分钟,我的负载平衡器返回“上游请求超时”,但我可以看到查询已提交到数据源,但对最终用户来说,它显示了错误的消息。如何应对这种情况? 我的职能