`

json格式的输入和输出

阅读更多
转载http://starscream.iteye.com/blog/1067606

Spring mvc处理json需要使用jackson的类库,因此为支持json格式的输入输出需要先修改pom.xml增加jackson包的引用

Xml代码 
<!-- json --> 
<dependency> 
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-core-lgpl</artifactId> 
    <version>1.8.1</version> 
</dependency> 
 
<dependency> 
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-mapper-lgpl</artifactId> 
    <version>1.8.1</version> 
</dependency> 



先修改之前的helloworld.jsp,增加客户端json格式的数据输入。
Javascript代码 
    var cfg =   { 
        type: 'POST',  
        data: JSON.stringify({userName:'winzip',password:'password',mobileNO:'13818881888'}),  
        dataType: 'json', 
        contentType:'application/json;charset=UTF-8',        
        success: function(result) {  
            alert(result.success);  
        }  
    }; 
 
function doTestJson(actionName){ 
    cfg.url = actionName; 
    $.ajax(cfg); 




根据前面的分析,在spring mvc中解析输入为json格式的数据有两种方式
1:使用@RequestBody来设置输入
Java代码 
    @RequestMapping("/json1") 
    @ResponseBody 
    public JsonResult testJson1(@RequestBody User u){ 
        log.info("get json input from request body annotation"); 
        log.info(u.getUserName()); 
        return new JsonResult(true,"return ok"); 



2:使用HttpEntity来实现输入绑定
Java代码 
    @RequestMapping("/json2")     
    public ResponseEntity<JsonResult> testJson2(HttpEntity<User> u){ 
        log.info("get json input from HttpEntity annotation"); 
        log.info(u.getBody().getUserName()); 
        ResponseEntity<JsonResult> responseResult = new ResponseEntity<JsonResult>( new JsonResult(true,"return ok"),HttpStatus.OK); 
        return responseResult; 



Json格式的输出也对应有两种方式
1:使用@responseBody来设置输出内容为context body
2:返回值设置为ResponseEntity<?>类型,以返回context body
另外,第三种方式是使用ContentNegotiatingViewResolver来设置输出为json格式,需要修改servlet context配置文件如下
Xml代码 
<bean 
    class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
    <property name="order" value="1" /> 
    <property name="mediaTypes"> 
        <map> 
            <entry key="json" value="application/json" /> 
        </map> 
    </property> 
    <property name="defaultViews"> 
        <list> 
            <bean 
                class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" /> 
        </list> 
    </property> 
    <property name="ignoreAcceptHeader" value="true" /> 
</bean> 

但这种格式的输出会返回{model类名:{内容}} 的json格式,
例如,以下代码
Java代码 
@RequestMapping("/json3.json") 
public JsonResult testJson3(@RequestBody User u){ 
    log.info("handle json output from ContentNegotiatingViewResolver"); 
    return new JsonResult(true,"return ok"); 


期望的返回是 {success:true,message:”return ok”};
但实际返回的却是 {"jsonResult":{"success":true,"msg":"return ok"}}
原因是MappingJacksonJsonView中对返回值的处理未考虑modelMap中只有一个值的情况,直接是按照mapName:{mapResult}的格式来返回数据的。
修改方法,重载MappingJacksonJsonView类并重写filterModel方法如下
Java代码 
protected Object filterModel(Map<String, Object> model) {   
    Map<?, ?> result = (Map<?, ?>) super.filterModel(model);   
    if (result.size() == 1) {   
        return result.values().iterator().next();   
    } else {   
        return result;   
    }   
}   


对应的ContentNegotiatingViewResolver修改如下
Xml代码 
<bean 
        class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
        <property name="order" value="1" /> 
        <property name="mediaTypes"> 
            <map> 
                <entry key="json" value="application/json" /> 
            </map> 
        </property> 
        <property name="defaultViews"> 
            <list> 
                <bean 
                    class="net.zhepu.json.MappingJacksonJsonView" /> 
            </list> 
        </property> 
        <property name="ignoreAcceptHeader" value="true" /> 
    </bean> 
分享到:
评论

相关推荐

    Spring MVC 学习笔记 九 json格式的输入和输出

    3. **模型绑定和JSON输入** 当前端向后端发送JSON数据时,Spring MVC可以自动将这些数据绑定到控制器方法的参数上。这需要我们的参数是Java Bean类型,其属性与JSON对象的键相对应。例如,如果我们有一个`User`类,...

    古诗内容提取json格式转jsonl

    在这个例子中,`古诗.json`是输入的JSON文件,而`古诗.jsonl`是输出的JSONL文件。`json.loads()`用于将JSON字符串解析为Python对象,`json.dumps()`则将Python对象序列化回JSON字符串。 转换古诗内容从JSON到JSONL...

    c语言json格式校验代码

    通过调用校验函数,程序可以判断输入的JSON数据是否有效,然后输出相应的结果。 `JSON_checker.h`是头文件,定义了`JSON_checker`库对外提供的接口。这些接口可能包括如`json_validate`这样的函数,用于执行实际的...

    mule 下的json格式输出

    此外,Mule还支持从各种数据源解析JSON输入,例如HTTP请求、文件或数据库查询结果。通过`&lt;dw:input-payload&gt;`或`&lt;dw:payload&gt;`元素,你可以将接收到的数据转换为JSON对象,并进行进一步的处理。 在实际应用中,你...

    json格式化工具

    1. **美化输出**:将一串未经格式化的JSON文本,通过添加缩进和换行,使其变得整洁易读。 2. **错误检测**:检查输入的JSON是否有效,如果存在语法错误,会提供相应的错误提示。 3. **折叠/展开**:对于嵌套层级较深...

    封装 fastjson 的json格式化工具

    在实际开发中,我们经常需要将JSON字符串进行格式化,以便于查看和调试,本文将详细介绍如何使用Fastjson封装一个JSON格式化工具。 首先,我们需要引入Fastjson的依赖。如果你使用的是Maven,可以在pom.xml文件中...

    java验证字符串是否符合json格式

    JSON是一种轻量级的数据交换格式,它允许数据以键值对的形式存储,易于人阅读和编写,同时也易于机器解析和生成。在本场景中,我们可能需要一个函数或方法来检查传递的字符串是否符合JSON的标准格式,以确保数据的...

    PHP API接口必备之输出json格式数据示例代码

    通过var_dump函数,我们可以打印出数组的详细结构,了解数据的具体内容和格式。 在API接口开发过程中,保证数据的准确传输和正确解析是非常关键的。了解和掌握JSON数据的编码和解码过程,可以有效地提升API接口开发...

    JSON格式化工具

    1. **美化输出**:将紧凑的JSON字符串展开,添加缩进和换行,使数据层次结构一目了然。 2. **高亮显示**:不同类型的值(如字符串、数字、对象、数组等)使用不同的颜色高亮,便于快速识别。 3. **错误检查**:验证...

    Java图形实现json格式化

    JSON格式化工具还需要处理无效的JSON输入,提供友好的错误提示。可以使用JSON库提供的解析异常类,如Jackson的`JsonParseException`或Gson的`JsonSyntaxException`。 9. **用户体验**: 优秀的图形界面不仅要有...

    Spring MVC学习笔记之json格式的输入和输出

    在Spring MVC框架中,处理JSON格式的输入输出是开发RESTful服务的重要一环。JSON(JavaScript Object Notation)因其轻量级和良好的跨平台兼容性而被广泛使用。Spring MVC提供了灵活的方式来处理JSON数据的输入和...

    JSON 格式化工具

    2. 格式化输出:将混乱的JSON字符串转换成清晰、层次分明的格式,便于理解和分析数据结构。 3. 查找与替换:部分工具还提供查找和替换功能,方便在大量JSON数据中定位特定内容并进行修改。 4. 折叠/展开:可以折叠或...

    json格式用到的包

    `json.dumps()`和`json.loads()`还有其他一些选项可以调整输出的格式,例如: - `indent`:设置缩进的空格数,用于美化输出。 - `sort_keys`:如果为True,输出的键会按字典序排序。 - `separators`:控制逗号和...

    转json格式所需的5个jar包.

    在IT行业中,JSON(JavaScript Object Notation)是一种广泛使用的轻量级数据交换格式,它易于人阅读和...无论是解析JSON输入、生成JSON输出,还是在Java对象和JSON之间进行转换,这些库都能提供强大且高效的解决方案。

    网页版JSON格式化工具

    1. **美化输出**:将原始的、未格式化的JSON数据按照标准格式进行缩进和换行,便于阅读。例如,它可以将连续的键值对通过缩进区分层次,使复杂的JSON结构清晰可见。 2. **错误检查**:工具通常会尝试解析输入的JSON...

    delphi_json解析格式化源码

    对于压缩包内的源码,可能包含了一个自定义的JSON解析器和格式化器。这些源码通常会包含以下部分: 1. JSON解析器:一个函数或类,接受JSON字符串作为输入,返回一个解析后的`TJSONObject`或`TJSONArray`实例。 2. ...

    json格式化工具(一目了然)

    1. **输入与输出**:用户可以输入未格式化的JSON字符串,工具会将其自动格式化并显示在界面上。同时,可能也支持导入本地JSON文件或导出格式化后的JSON到新的文件中。 2. **格式化选项**:工具可能允许用户自定义...

    Xcode插件:将JSON格式化输出为模型的属性ESJsonFormat-Xcode.zip

    将 JSON 格式化输出为模型的属性 写在之前的注意 JSON中的key对应的value为Null的话会格式化成NSString类型 格式化之前光标放在你需要添加属性的地方 Root...

Global site tag (gtag.js) - Google Analytics