`
lovefly_zero
  • 浏览: 390032 次
  • 性别: Icon_minigender_1
  • 来自: 株洲
社区版块
存档分类
最新评论

Spring Json View之快速开始(二)

阅读更多

快速开始-用SimpleForm-Controller提交GET/POST请求
 
 Command-Controller提供一个完整的CommandBean,Spring对它提供校验和绑定支持。这个示例在Command-Controller中返回一个Model-Map的Json字符串,json视图返回信息中包含字段错误、全局错误和绑定。支持CommandBean属性类型的转换。

  • 通过formBackingObject方法触发GET请求。
  • 通过onSubmitAction方法出发POST请求。

 

详细信息参见文档


 
Spring ApplicationContext
 

<beans>
    <bean name="simpleJsonPostFormController" 
         class="org.thing.spring.json.controller.SimpleJsonPostFormController">
            <property name="commandClass">
                <value>org.thing.spring.json.controller.SpringJsonForm</value>
            </property>
        <property name="formView"><value>jsonView</value></property>
        <property name="successView"><value>jsonView</value></property>
    </bean>
    <bean name="urlMapping" 
          class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/hello.json">simpleJsonPostFormController</prop>
           </props>
        </property>
    </bean>
    <bean name="viewResolver" 
        class="org.springframework.web.servlet.view.XmlViewResolver" />
</beans>

 

Spring view.xml

<beans>
    <bean name="jsonView" class="org.springframework.web.servlet.view.json.JsonView">
            <property name="jsonErrors">
                <list>
                        <ref bean="statusError" />
                        <ref bean="modelflagError" />
                </list>
        </property>
    </bean>
    
    <bean name="statusError" 
          class="org.springframework.web.servlet.view.json.error.HttpStatusError">
          <property name="errorCode"><value>311</value></property>
    </bean>
    <bean name="modelflagError" 
          class="org.springframework.web.servlet.view.json.error.ModelFlagError">
          <property name="name"><value>failure</value></property>
          <property name="value"><value>true</value></property>
    </bean>
        
</beans>

 

form.html

<head>
        <title>
                First Test Spring Json Demo
        </title>
        <script type="text/javascript" src="script/prototype.js"></script>
        <script type="text/javascript" src="script/behaviour.js"></script>
        <script type="text/javascript" src="script/behaviour-roles.js"></script>
        <meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"/>
</head>
</head>
<body>
        <h1>Spring JSON DEMO</h1>
        <h2>Spring Ajax Post (SimpleFormControler and CommandController)</h2>
        <form method="post" id="form">
                <input id="placeofbirth" type="text" name="placeofbirth" ><br>
                <input id="birthday" type="text" name="birthday" ><br/>
                <br/>
                <b>place of birth : </b><span id="t_placeofbirth"></span><br/>
                <b>birthday : </b><span id="t_birthday"></span><br/>
        
        </form>
        <br/>
        <span id ="error" ></span>
        <br/>
        <button id="clearData">clear name</button>
        <<button id="sfc_postData">send data to SimpleFormController</button>
</body>

 

JavaScript behaviour-roles.js

var printResult = function(transport){
                var result = 
                        "Status : " + transport.status
                        + "\n"
                        + "\n"
                        + "Json-Result:"
                        + "\n" + transport.responseText;
                alert(result);
};
var addErrors = function(transport){
        var json = transport.responseText.evalJSON();
        
        var error = "Errorhandler Info: </br>"
        + "failture: " + json.failure +"</br>"
        + "status : + " + transport.status +"</br>"
        +"</br>"
        +"Spring Errorhandling: </br>"
        + "hasGlobalErrors : " + json.hasGlobalErrors +"</br>"
        + "</br>"
        + "hasFieldErrors : " + json.hasFieldErrors +"</br>";
        if(json.fielderrors.birthday)
                error = error + "birthday : " + json.fielderrors.birthday +"</br>";
        if(json.fielderrors.placeofbirth)
                error = error + "placeofbirth : " + json.fielderrors.placeofbirth +"</br>";
        
        $('error').innerHTML = error;
};
var myrules = {
        'button#clearData' : function(element){
                element.onclick = function(){
                        $('t_placeofbirth').innerHTML = '';
                        $('t_birthday').innerHTML = '';
                        $('error').innerHTML = '';
        },
        'button#sfc_postData' : function(element){
        
            new Ajax.Request('hello1.json', { 
                                method:'get',
                                onSuccess: function(transport){
                                        var json = transport.responseText.evalJSON();
                                        printResult(transport);
                                $('placeofbirth').value = json.command.placeofbirth;
                                $('birthday').value = json.command.birthday;
                        },
                        onFailure: function(transport){
                                var json = transport.responseText.evalJSON();
                                        printResult(transport);
                                        addErrors(transport);
                        }
                        
                        }); 
            
                element.onclick = function(){
                        new Ajax.Request('hello1.json', { 
                                method:'post',
                                parameters: $('form').serialize(false),
                                onSuccess: function(transport){
                                        var json = transport.responseText.evalJSON();
                                        printResult(transport);
                                        $('t_placeofbirth').innerHTML = json.command.placeofbirth;
                                $('t_birthday').innerHTML =  json.command.birthday;
                                $('error').innerHTML = '';
                        },
                        onFailure: function(transport){
                                var json = transport.responseText.evalJSON();
                                        printResult(transport);
                                        addErrors(transport);
                        }
                        
                        });
                }
        }
};
Behaviour.register(myrules);

 

CommandBean

public class SpringJsonForm {

        private String placeofbirth;
        private Date birthday;
        
        
        public String getPlaceofbirth() {
                return placeofbirth;
        }
        public void setPlaceofbirth(String placeofbirth) {
                this.placeofbirth = placeofbirth;
        }
        public Date getBirthday() {
                return birthday;
        }
        public void setBirthday(Date birthday) {
                this.birthday = birthday;
        }
}

 

Source

public class SimpleJsonPostFormController extends SimpleFormController {

        protected void initBinder(HttpServletRequest request,  ServletRequestDataBinder binder) throws Exception{
                SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
                CustomDateEditor editor = new CustomDateEditor(dateFormat, true);
                binder.registerCustomEditor(Date.class, editor);
        }

        @Override
        protected Object formBackingObject(HttpServletRequest request)
                        throws Exception {
                SpringJsonForm bean = new SpringJsonForm();
                bean.setBirthday(new Date());
                bean.setPlaceofbirth("Sydney");
                return bean;
        }

        public void onSubmitAction(Object command, BindException errors) {
                SpringJsonForm bean = (SpringJsonForm) command;
        }

}

 

  • GET-Response
     Status : 200 
     
     Result:
     {"firstname":"Peter","secondname":"Schmitt"}
    
     
  • POST Response
    Response-Status : 311
    
    {"command":{
                "birthday":"30-01-2008",
                "placeofbirth":"Sydney"
               },
     "failure":"true",
     "hasGlobalErrors":"true",
     "globalerrors": ["errormessage1","errormessage2"],  
     "hasFieldErrors":"true",
     "fielderrors":{
                 "birthday":"Please enter a valide date!"
    }}
    
     


  

快速开始-使用JsonExceptionResolver抛出异常捕获信息的请求

 

实现异常处理是通过异常分析处理分析器来完成:JsonExceptionResolver。你仅仅需要注册一个JsonErrorHandlers或者JsonExceptionHandler操作一个返回信息以便抛出异常。

JsonErrorHandlers 在产生了错误的情况下发响应到客户端。详细信息参见Errorhandling

JsonExceptionHandler 转换java.lang.Exception对象并添加到Json字符串。详细信息参见Exceptionhandling

 

 

Spring ApplicationContext

  

<beans>
    <bean name="viewResolver" 
        class="org.springframework.web.servlet.view.XmlViewResolver" />
    
    <bean name="throwExceptionGetController" 
        class="org.thing.spring.json.controller.ThrowExceptionGetController"/>
        
    <bean id="exceptionResolver" 
        class="org.springframework.web.servlet.view.json.exception.JsonExceptionResolver">
        <property name="exceptionView"><value>jsonView</value></property>
                <property name="errorHandler">
                <list>
                        <ref bean="statusError" />
                        <ref bean="modelflagError" />
                </list>
        </property>
        <property name="exceptionHandler">
                <list>
                        <ref bean="stackTraceExceptionHandler" />
                        <ref bean="exceptionMessageExceptionHandler" />
                </list>
        </property>
        </bean>
    
        <bean name="statusError" 
              class="org.springframework.web.servlet.view.json.error.HttpStatusError"/>
        
        <bean name="modelflagError" 
              class="org.springframework.web.servlet.view.json.error.ModelFlagError"/
        
        <bean name="stackTraceExceptionHandler" 
              class="org.springframework.web.servlet.view.json.exception.StackTraceExceptionHandler"/>
        
        <bean name="exceptionMessageExceptionHandler" 
              class="org.springframework.web.servlet.view.json.exception.ExceptionMessageExceptionHandler"/>
        
</beans>

 

Spring view.xml

<beans>
    <bean name="jsonView" class="org.springframework.web.servlet.view.json.JsonView">
            <property name="jsonErrors">
                <list>
                        <ref bean="statusError" />
                        <ref bean="modelflagError" />
                </list>
        </property>
    </bean>
    
    <bean name="statusError" 
          class="org.springframework.web.servlet.view.json.error.HttpStatusError">
          <property name="errorCode"><value>311</value></property>
    </bean>
    <bean name="modelflagError" 
          class="org.springframework.web.servlet.view.json.error.ModelFlagError">
          <property name="name"><value>failure</value></property>
          <property name="value"><value>true</value></property>
    </bean>
        
</beans>

  

 

form.html

   

<head>
        <title>
                First Test Spring Json Demo
        </title>
        <script type="text/javascript" src="script/prototype.js"></script>
        <script type="text/javascript" src="script/behaviour.js"></script>
        <script type="text/javascript" src="script/behaviour-roles.js"></script>
        <meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"/>
</head>
</head>
<body>
        <h1>Spring JSON DEMO</h1>
        <h2>Exception-Handling by JsonExceptionResolver</h2>
        <button id="throwException">throw exception</button>
</body>

 

JavaScript behaviour-roles.js

var printResult = function(transport){
                var result = 
                        "Status : " + transport.status
                        + "\n"
                        + "\n"
                        + "Json-Result:"
                        + "\n" + transport.responseText;
                alert(result);
};

var myrules = {

        'button#throwException' : function(element){
                element.onclick = function(){
                        new Ajax.Request('exception.json', { 
                                method:'get',
                                parameters: {throwException: 'true'},
                                onFailure: function(transport){
                                var json = transport.responseText.evalJSON();
                                        printResult(transport);
                        }
                        });
                }
        }
        
};
Behaviour.register(myrules);

 

Controller Source

public class ThrowExceptionGetController implements Controller {

        /** Logger for this class and subclasses */
        protected final Log logger = LogFactory.getLog(getClass());

        public ModelAndView handleRequest(HttpServletRequest request,
                        HttpServletResponse response) throws Exception {

                if(request.getParameter("throwException")!= null)
                        throw new Exception("You throw an exeption !");
                
                Map model = new HashMap();
                model.put("exception", "false");

                return new ModelAndView("json1", model);
        }
}
 

Result

  • GET-Response
    Response-Status : 311
    
    {
            "failure":"true",
            "exception.message":"java.lang.Exception: You throw an exeption !",
            "exception.stacktrace":
                            "java.lang.Exception: You throw an exeption !
                            \n\tat org.thing.spring.json.controller.[...]
                            \n\tat org.springframework.web.servlet.mvc.[...]
                            [...]"
    }
    
     
分享到:
评论

相关推荐

    ext + spring Json view + springMVC + Freemaker

    "ext + spring Json view + springMVC + Freemaker"的组合提供了一种强大的解决方案,它整合了多种技术,以实现丰富的用户界面、灵活的数据处理和高效的视图渲染。下面我们将深入探讨这些技术及其相互作用。 1. **...

    spring配置JSON拦截器VIEW

    标题中的“spring配置JSON拦截器VIEW”指的是在Spring框架中设置JSON数据的处理方式,特别是通过拦截器(Interceptor)来优化视图层(View)的响应。在Web开发中,拦截器是一种常用的机制,用于在请求被实际处理之前...

    spring-mvc-jsonview源代码

    本篇文章将通过解析“spring-mvc-jsonview”源代码,深入探讨Spring MVC如何支持AJAX请求,并提供一个实际的使用教程。 一、JSON视图解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人...

    springMVC4-rest-jackson-jsonview-annotation.zip

    Spring4.1开始直接支持@JsonView注解。要使用@JsonView,首先我们需要定义视图,我们可以定义多个视图。一个视图定义可以继承其他视图定义。我们的POJO使用@JsonView注解属性传递已经定义的视图。在Spring的...

    spring data jpa + spring + json demo

    【标题】"spring data jpa + spring + json demo"揭示了这个项目是关于使用Spring Data JPA、Spring框架以及JSON处理的一个示例应用。Spring Data JPA是Spring框架的一个模块,它简化了JPA(Java Persistence API)...

    springmvc-json-view需要的jar

    2. 配置Spring MVC的视图解析器,例如使用`MappingJackson2JsonView`或`JacksonJsonView`(如果使用Jackson库)来处理JSON视图。 3. 在控制器方法上使用`@RequestMapping`和`@ResponseBody`注解,指定处理HTTP请求并...

    spring mvc(整合了json)

    Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要用于构建 MVC(Model-View-Controller)模式的 Web 应用程序。在现代 Web 开发中,JSON(JavaScript Object Notation)作为一种...

    spring-json 工程依赖

    3. **ModelAndView与JsonView**:在Spring MVC中,可以创建一个`ModelAndView`对象,并设置`JsonView`,这样在视图解析时会自动将模型数据转化为JSON。 4. **HTTP消息转换器**:Spring MVC通过`...

    spring mvc json&&jackson jquery js

    Spring MVC还提供了`@JsonView`注解来控制JSON响应中的数据粒度,以及`@JsonProperty`和`@JsonIgnore`来控制哪些字段应包含在JSON中。 **jQuery和JavaScript** jQuery是一个流行的JavaScript库,简化了DOM操作、...

    spring json mapping

    最后,Spring MVC还提供了一些高级特性,如自定义JSON序列化和反序列化行为,或者使用`@JsonView`注解来控制哪些字段应被包含在JSON中。你也可以利用`@JsonInclude`和`@JsonExclude`来控制哪些属性应该在序列化时被...

    springmvc加入json支持

    在实际开发中,你可能还需要处理JSON安全问题,例如使用`@JsonView`来限制返回的字段,或者使用`@JsonFormat`来控制日期格式等。同时,随着版本的更新,确保始终使用最新的稳定版本以获取最佳性能和安全性。

    spring-json项目

    【Spring-JSON项目】是一个基于Eclipse开发的项目,它主要关注的是如何在Spring框架中有效地集成和使用JSON(JavaScript Object Notation)进行数据交换。这个项目的核心目标是利用Spring MVC来构建RESTful Web服务...

    四. Spring MVC 3 支持json及 常见错误解决

    3. **视图解析器**:如果你的返回类型是`ModelAndView`,你可以配置一个`MappingJackson2JsonView`,这样视图会自动将模型数据转换为JSON。 4. **JSON与Ajax**:Spring MVC 3与jQuery或其他JavaScript库配合,可以...

    struts2_spring_json.rar_liferay struts2 json_portlet json_spring

    Struts2和Spring框架在Java Web开发中是广泛使用的,它们提供了强大的MVC(Model-View-Controller)架构支持。Liferay是一个流行的开源企业级门户平台,它允许开发者创建和集成portlet来构建复杂的Web应用程序。在...

    json在spring中的应用

    8. **自定义JSON视图**:如果需要对JSON的生成进行更精细的控制,可以创建自定义的`JsonView`,并在返回类型上指定该视图。 总之,JSON在Spring中的应用是多方面的,它简化了数据交换,提高了开发效率。无论是简单...

    spring mvc + spring + mybatis+json整合

    Spring MVC是Spring框架的一部分,专用于构建Web应用程序的Model-View-Controller(MVC)架构。MyBatis则是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。JSON(JavaScript Object Notation)是一...

    2. [视频]Spring Boot返回json数据【从零开始学Spring Boot】

    此外,Spring Boot还支持使用`@JsonView`注解来控制哪些字段应该在序列化时包含,这对于构建API时非常有用,可以根据不同的客户端需求暴露不同的数据。 至于标签“源码”和“工具”,这表明视频可能还会涉及阅读和...

    spring_json.zip

    在本文中,我们将深入探讨如何使用Spring框架返回JSON视图,并通过一个简单的示例来演示这一过程。这个示例是基于Eclipse IDE开发的Java Web项目,最终在Tomcat服务器上进行部署和发布。 首先,我们需要理解Spring...

    struts2+spring+hibernate+jquery+json

    Struts2、Spring、Hibernate、jQuery 和 JSON 是五个在IT行业中极为重要的技术组件,它们各自在Web应用开发中扮演着不同的角色。这篇文章将详细介绍这些技术的整合使用以及它们的功能。 首先,Struts2 是一个基于 ...

    json和spring mvc 所需要的jar

    Spring MVC与JSON的集成通常通过Spring的`MappingJackson2HttpMessageConverter`或`MappingJackson2JsonView`实现,这些类使用Jackson库处理JSON数据。如果你选择使用Gson,你需要配置`GsonHttpMessageConverter`。 ...

Global site tag (gtag.js) - Google Analytics