在我的请求处理程序中,我想做一些验证,并根据验证检查的结果返回不同的响应(成功/错误)。所以我为响应对象创建了一个抽象类,并为失败案例和成功案例创建了 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);
}
最佳答案
这里有两个问题:-
必须更改您的返回类型以匹配两个响应子类 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, HTTPStatus.OK);
}
关于java - Spring MVC : How to return different type in ResponseEntity body,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19710710/
相关文章:
java - 如何让 Spring 接受流畅(非 void)的 setter ?
java - 从 Spring JDBC 模板执行 SQL 文件
spring - @Secured 在 Controller 中不起作用,但拦截 URL 似乎工作正
java - 在 Spring MVC 中使用 @valid(JSR-303) 验证时不显示错误消息
java - Spring Data JPA - 用于 json 序列化的 ZonedDateTim
java - Hibernate + Spring 使用多个数据源?