栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在SpringMVC中使用@ResponseBody返回JsonObject

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在SpringMVC中使用@ResponseBody返回JsonObject

当您意识到

HandlerMethodReturnValueHandler
新的JSR 353 API
没有特殊要求时,答案很简单。相反,在这种情况下,
RequestResponseBodyMethodProcessor
(for
@ResponseBody
)使用
MappingJackson2HttpMessageConverter
来序列化处理程序方法的返回值。

在内部,

MappingJackson2HttpMessageConverter
使用
ObjectMapper
。默认情况下,
ObjectMapper
使用类的getter将对象序列化为JSON。

假设你正在使用

Glassfish
的该JSR
353的提供者实现,这些类是
org.glassfish.json.JsonObjectBuilderImpl$JsonObjectImpl
org.glassfish.json.JsonStringImpl

org.glassfish.json.JsonNumberImpl
,和
javax.json.JsonValue$3
(该值的匿名类
FALSE
)。

因为

JsonObjectImpl
(您的结果(即根,对象))是
Map
(特殊类型),
ObjectMapper
所以将地图的条目序列化为JSON键值对元素,其中Map键是JSON键,而Map值是JSON值。对于关键的,它工作正常,如序列化
name
age
married
。对于值,它使用我上面提到的类及其各自的getter。例如,
org.glassfish.json.JsonStringImpl
实现为

final class JsonStringImpl implements JsonString {    private final String value;    public JsonStringImpl(String value) {        this.value = value;    }    @Override    public String getString() {        return value;    }    @Override    public CharSequence getChars() {        return value;    }    @Override    public ValueType getValueType() {        return ValueType.STRING;    }    ...}

ObjectMapper
因此,使用Java Bean getter来序列化
JsonStringImpl
对象(即Map Entry的值),如下所示:

{"chars":"Dade","string":"Dade","valueType":"STRING"}

其他字段也一样。

如果要正确编写JSON,只需返回

String

@RequestMapping("/test", produces="application/json")@ResponseBodypublic String test() {        JsonObject result = Json.createObjectBuilder()     .add("name", "Dade")     .add("age", 23)     .add("married", false)     .build();        return result.toString();}

或自己制作

HandlerMethodReturnValueHandler
,稍微复杂一点,但更有意义。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/485370.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号