java - Spring MVC : How to return different type in ResponseEntity body

标签 java spring generics 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);
}

最佳答案

这里有两个问题:-

  • 必须更改您的返回类型以匹配两个响应子类 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 - java后端单页应用打包部署

spring - @Scope ("prototype") bean 范围未创建新 bean

java - Java,Spring,JSP,<form>。 BeanResult'command'的BindingResult和普通目标对象都不能用作请求属性

generics - 通用存储库模式的此代码中的 IEntity 是什么?

c# - 将 Nullable<Boolean> 转换为通用类型

java - 避免单实例变量在android中被混淆

java - 2 个按钮,1 个用于启动 MP3 文件,1 个用于停止

java - java中美国各州的地理定位(纬度/经度)

java - 白标签错误页面此应用程序没有配置错误 View ,因此您将其视为后备

具有匿名内部类的 Java 比较器接口(interface) NullsLast