天天看点

SpringMVC那点事

1、第一种方式是spring2时代的产物,也就是每个json视图controller配置一个Jsoniew。

  如:<bean id="defaultJsonView" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/> 

  或者<bean id="defaultJsonView" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>

  同样要用jackson的jar包。

2、第二种使用JSON工具将对象序列化成json,常用工具Jackson,fastjson,gson。

3、第三种利用spring mvc3的注解@ResponseBody,然后使用spring mvc的默认配置就可以返回json了。

  即return Object 会自动转换成JSON对象。

1.ModelAndView

  对于ModelAndView构造函数可以指定返回页面的名称,也可以通过setViewName方法来设置所需要跳转的页面;

2.Model

  一个模型对象,主要包含spring封装好的model和modelMap,以及java.util.Map,当没有视图返回的时候视图名称将由requestToViewNameTranslator决定;

3.ModelMap

待续

4.Map

   响应的view应该也是该请求的view。等同于void返回。

5.View

  这个时候如果在渲染页面的过程中模型的话,就会给处理器方法定义一个模型参数,然后在方法体里面往模型中添加值。

6.String

  对于String的返回类型,笔者是配合Model来使用的。

  或者通过配合@ResponseBody来将内容或者对象作为HTTP响应正文返回(适合做即时校验);

  返回字符串表示一个视图名称,这个时候如果需要在渲染视图的过程中需要模型的话,就可以给处理器添加一个模型参数,然后在方法体往模型添加值就可以了。如果返回的是对象则会产生一个默认的视图,然后将返回的对象直接解析成JSON,默认视图+JSON生成正文返回。

7.Void

  当返回类型为Void的时候,则响应的视图页面为对应着的访问地址

  返回的结果页面还是:/type

  这个时候我们一般是将返回结果写在了HttpServletResponse 中了,如果没写的话,spring就会利用RequestToViewNameTranslator 来返回一个对应的视图名称。如果这个时候需要模型的话,处理方法和返回字符串的情况是相同的。

  通过对API的研究可以通过@JsonProperty以及@JsonAutoDetect来实现。

          This pseudo-type indicates that all of real types are included

          Creators are constructors and (static) factory methods used to construct POJO instances for deserialization

          Field refers to fields of regular Java objects.

          Getters are methods used to get a POJO field value for serialization, or, under certain conditions also for de-serialization.

          This pseudo-type indicates that none of real types is included

          Setters are methods used to set a POJO value for deserialization.

  我做的是将form的数据转成json数据,然后发送到后台,后台是SpringMVC。

  SpringMVC

  注意:这两个Converter很是重要,他们可以帮助我们将Json数据转换成java对象。

  Controler

  js

  开始的时候总是出现 400 (Bad Request)这个错误,  出现这个错误的原因一般最常见的就是后台的实体类bean与前台穿过的类型不匹配。然后我打印了一下上述方式生成的json,发现数据格式竟然是这样子的:

[{"name":"phoneNumber","value":""},{"name":"eMail","value":""},{"name":"appId","value":""},{"name":"title","value":""},{"name":"content","value":""},{"name":"isMailtTemplate","value":"false"}]

  相信如果不仔细看的话,还以为是对的。仔细一看,怎么表单的name属性和value属性怎么出现在这个Json对象里了。这怎么能成功的和后台交互呢?

  于是改了一下,js如下:

  最终打印的数据:

  {"phoneNumber":"","eMail":"","appId":"","title":"","content":"fsdfsd","isMailtTemplate":"false"}

  这才是正解啊。

<a href="http://blog.csdn.net/yongjiandan/article/details/8308793" target="_blank">http://blog.csdn.net/yongjiandan/article/details/8308793</a>

 

SpringMVC那点事
SpringMVC那点事

  后台自定义Bean (注意:不要写成内部类,要写成单独的一个类。内部类可能报错,Json转对象失败:"No suitable constructor found for type [simple type, class com.test.faster.domain.respons ,即使定义了构造方法。)

SpringMVC那点事