java - 如何让 MappingJacksonHttpMessageConverter 设置内容长度

标签 java spring

我使用 @ResponseBody 从 Spring Controller 返回 JSON 数据。与此类似:

@RequestMapping("/api/someMethod.json")
public @ResponseBody MyClass someMethod(@RequestParam Long someVal, HttpServletRequest request) {
    return new MyClass(someVal);
}

MappingJacksonHttpMessageConverter 始终为 getContentLength() 返回 null,这会导致内容长度 header 为 -1。

我需要准确设置内容长度(以解决客户端上的一个单独问题,但我无法修复该问题)。

让此类计算生成的 JSON 的内容长度并将其设置在内容长度 header 中的最简单方法是什么?

我不想编写自己的 JSON 生成器并返回 json 字符串,因为我有很多 API 方法需要此“修复”。

提前致谢。

最佳答案

一般来说,您永远不必手动设置 HTTP header 的内容长度。能够告诉服务数据比实际发送的数据多或少是非常危险的。看来底层技术(在你的例子中是 spring)实际上应该没有正确处理 json 转换。

也许 MyClass 对象没有正确转换为 json,这就是没有内容的原因?

关于java - 如何让 MappingJacksonHttpMessageConverter 设置内容长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12380404/

相关文章:

java - 编码问题 - 我认为 UTF-8 被视为 ISO-8859-1

java - 打印从 Spring MVC Controller 发送的字符串数组在 javascript 中仅显示 "toJSON"

java - 应用程序中不同模块的多连接池配置

java - 如何使用 Spring MVC 3 从 Controller 中的模型中获取对象?

java - 我如何在 Java 编程中验证 YAML 结构

java - 如何将文件的内容添加到数组列表中

java - 如何保护 GlassFish 2 上的 Web 服务?

java - 安卓.content.res.Resources$NotFoundException : Resource ID #0x7f040019

java - 如何将另一个对象添加到对象数组中

java - 使用 POJO 作为 Spring Redis 缓存的键时,如何获取所有键?