spring mvc底层通过消息转换器 解析json字符串/json对象成JavaBean

讲述一个自己写Controller层的接口的经历,到现在一共经历了三种改变:
* 接口参数是基本类型;
* 接口参数是JOSNObject类型;
* 接口参数是JavaBean类型;

每次改变都对spring有了更深入的了解,每次改变都让代码变得更加简化、更加易读。

阶段一(接口参数是String类型)

在初学spring-web的时候,Controller层的接口形参都是基本类型,比如:

@RequestMapping(value = "/interface01", method = RequestMethod.GET)
public String testInterface01(@RequestParam String username, @RequestParam int age, @RequestParam float heigh) { return ... }

@RequestMapping(value = "/interface02", method = RequestMethod.POST)
public String testInterface02(@RequestBody String params) { return ... }

无论是GET方法,还是POST方法,无论请求参数是基本类型数据,还是json字符串或JOSNObject,接口形参都是基本数据类型。然后根据需要从基本类型数据中转换或解析。超级麻烦。

阶段二(接口参数是JOSNObject类型)

后来慢慢的了解到http接口传参常用json来传输数据,后来接口就改成了如下方式:

@RequestMapping(value = "/interface03", method = RequestMethod.GET)
public String testInterface03(@RequestParam JSONObject jsonObject) { return ... }

@RequestMapping(value = "/interface04", method = RequestMethod.POST)
public String testInterface04(@RequestBody JSONObject jsonObject) { return ... }

当参数不是单个的基本类型数据时,无论是GET还是POST,形参接收请求参数时,都用上JSONObject来接收了。然后直接通过JSONObject来做进一步的转化和处理。比第一阶段方便了写。

阶段三(接口参数是JavaBean类型)

但是随着接口越来越多,发现这种无谓的转换是没有价值的。每一个接口的输入都先进行转换,闲的接口非常的臃肿。那么接口参数能不能直接使用存储数据的JavaBean呢?很幸运,Spring是支持的。

@RequestMapping(value = "/interface05", method = RequestMethod.GET)
public String testInterface05(@RequestParam JavaBean javaBean) { return ... }

@RequestMapping(value = "/interface06", method = RequestMethod.POST)
public String testInterface06(@RequestBody JavaBean javaBean) { return ... }

这样的话,我们在接口处可以直接进行JavaBean的操作了,是不是方便了很多?
但是要注意的是,先要让Spring自己实现从请求参数json到JavaBean的转换,需要通过Spring的消息转换器进行消息转换,我们需要对Spring进行如下配置:

###我在这里使用的是fastJson的消息转换器
<bean id="fastJsonHttpMessageConverter" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
    
    <property name="supportedMediaTypes">
        <list>
            <value>text/html;charset=UTF-8value>
            <value>application/json;charset=UTF-8value>
        list>
    property>
bean>

你可能感兴趣的:(学习日记)