dna*_*ang 15 java generics spring spring-mvc
在我的请求处理程序中,我想做一些验证,并根据验证检查的结果,我将返回不同的响应(成功/错误).因此,我为响应对象创建了一个抽象类,并为失败案例和成功案例创建了2个子类.代码看起来像这样,但它不编译,抱怨errorResponse和successResponse无法转换为AbstractResponse.
我是Java Generic和Spring MVC的新手,所以我不知道解决这个问题的简单方法.
@ResponseBody ResponseEntity<AbstractResponse> createUser(@RequestBody String requestBody) {
if(!valid(requestBody) {
ErrorResponse errResponse = new ErrorResponse();
//populate with error information
return new ResponseEntity<> (errResponse, HTTPStatus.BAD_REQUEST);
}
createUser();
CreateUserSuccessResponse successResponse = new CreateUserSuccessResponse();
// populate with more info
return new ResponseEntity<> (successResponse, HTTPSatus.OK);
}
Run Code Online (Sandbox Code Playgroud)
小智 24
这里有两个问题:
ResponseEntity<? extends AbstractResponse>当您实例化ResponseEntity时,您不能使用简化的<>语法来指定要使用的响应类 new ResponseEntity<ErrorResponse> (errResponse, HTTPStatus.BAD_REQUEST);
@ResponseBody ResponseEntity<? extends AbstractResponse> createUser(@RequestBody String requestBody) {
if(!valid(requestBody) {
ErrorResponse errResponse = new ErrorResponse();
//populate with error information
return new ResponseEntity<ErrorResponse> (errResponse, HTTPStatus.BAD_REQUEST);
}
createUser();
CreateUserSuccessResponse successResponse = new CreateUserSuccessResponse();
// populate with more info
return new ResponseEntity<CreateUserSuccessResponse> (successResponse, HTTPSatus.OK);
}
Run Code Online (Sandbox Code Playgroud)Rub*_*ben 11
另一种方法是使用错误处理程序
@ResponseBody ResponseEntity<CreateUserSuccessResponse> createUser(@RequestBody String requestBody) throws UserCreationException {
if(!valid(requestBody) {
throw new UserCreationException(/* ... */)
}
createUser();
CreateUserSuccessResponse successResponse = new CreateUserSuccessResponse();
// populate with more info
return new ResponseEntity<CreateUserSuccessResponse> (successResponse, HTTPSatus.OK);
}
public static class UserCreationException extends Exception {
// define error information here
}
@ExceptionHandler(UserCreationException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public ErrorResponse handle(UserCreationException e) {
ErrorResponse errResponse = new ErrorResponse();
//populate with error information from the exception
return errResponse;
}
Run Code Online (Sandbox Code Playgroud)
这种方法可以返回任何类型的对象,因此不再需要成功案例和错误案例(甚至案例)的抽象超类.
| 归档时间: |
|
| 查看次数: |
30250 次 |
| 最近记录: |