java - 响应未根据 Spring 4.3.0 中我的自定义响应类进行转换

标签 java json spring spring-mvc

我扩展了 ResponseEntity 类并使用构造函数创建了一个自定义类。

But in Spring 3 and Spring 4 JSON format is different.

1) Spring 4:

[
  {
    "communityTypeId": 1,
    "communityTypeName": "Indian"
  }
] 

2) Spring 3:

{
  "headers": {},
  "body": [
      {
        "communityTypeId": 1,
        "communityTypeName": "Indian"
      }
   ]
}

我的 Controller 方法是:

@RequestMapping(value = "/getcommunity")
    public @ResponseBody CultureRideResponseEntity getCommunity() {
        try {
            List<CommunityType> communityTypeList = iCommunityTypeService.getList();
            if (communityTypeList != null && communityTypeList.size() > 0)
                return new CultureRideResponseEntity(HttpStatus.OK, communityTypeList);
            return new CultureRideResponseEntity(HttpStatus.NO_CONTENT, CulturerideConstant.NO_COMMUNITY_FOUND);
        } catch (CultureRideException ex) {
            return new CultureRideResponseEntity(HttpStatus.EXPECTATION_FAILED, ex.errorMessage());
        }
    }

响应实体类是我为了扩展 ResponseEntity 而创建的:

public class CultureRideResponseEntity extends ResponseEntity<Object> {    

    // String Property is used to store error message
    private String message;

    public CultureRideResponseEntity(HttpStatus status, Object data) {
        super(data, status);
        log.debug("response data:", data);
    }

    public CultureRideResponseEntity(HttpStatus status, Exception ex) {
        super(null, status);
        message = ex.getMessage();
        log.error(ex.getMessage(), ex);
    }

    public CultureRideResponseEntity(HttpStatus status, String msg) {
        super(null, status);
        setMessage(msg);
        log.debug("response data:", msg);
    }

    public CultureRideResponseEntity(HttpStatus status, Object data, String msg) {
        super(data, status);
        setMessage(msg);
        log.debug("response data:", data);
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

最佳答案

为什么要扩展 ResponseEntity,这看起来很奇怪?

无论如何,ResponseEntity (HttpEntity) 在 Spring 4 中有一个 getHeaders(),并且这似乎被序列化为 JSON 的一部分。

看起来扩展是为了促进错误处理而创建的,这通常是使用 @ExceptionHandler 注解的方法来完成的,并返回另一个带有适当错误代码的 ResponseEntity 。

关于java - 响应未根据 Spring 4.3.0 中我的自定义响应类进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41503700/

相关文章:

java - 如何在 Intellij 中优雅地关闭 gradle/为 java 应用程序设置 java 选项

java - 无法在 Spring 4 中向 POST 服务发送数据

javascript - 数组到动态函数: Use eval or not?

javascript - 检查 JSON 对象的完整性

java - Spring @Autowired变量在@Component内部为空

java - 使 JTable 中的 JCheckBox 可编辑

java - 矩形出现在不应该出现的位置

java - Jersey 2 中的 HashMap 到 JSON 响应

java - 从 Spring 应用程序上下文解析 JNDI 查找?

java - Multipart transferTo 在使用 createTempFile 时查找错误的文件地址