如果需要支持restful方式的web访问,在服务器端,spring的@pathvariable注解可以派上用场,它可以直接从url中解析出请求的参数;在客户端,可以使用已经封装好的restfultemplate模板进行编程,通常访问缩减到只要几行即可完成。
在http协议中使用的数据封装格式可以采用xml和json或其他,一般使用json的较多,需要添加jackson的jar包并且在web.xml中设置好httpmassege adapter的解析方式为jackson。
restfultemplate和jackson的基本使用可以参考官方文档,以下描述一些遇到的问题:
(1)版本匹配的问题,spring和jackson之间需要版本匹配,spring4.2只支持json2.7以下的版本,使用json2.7需要将spring升级到4.3以上,否则会报接口错误。
(2)@requestbody可以解析json字符串,不能解析json对象,因此在前端的访问如ajax的data参数,需要将json对象进行转换,在js中可以使用Json.stringify()函数进行转换,并且由于使用的数据类型为json,需要设置contentType的值为application /json
(3)@requestbody可以将json对象直接映射为一个javabean,因此ajax在提交一个复杂对象的时候contenType应该尽可能使用json而不是采用默认的x-www-form-urlencode,直接手工映射键值对非常繁琐并且容易出错。
(4)对于表单,可以使用form.searilizeObject()函数转换为json对象,再转为json字符串。
(5)@requestbody接收的javabean对象应该注意,属性的取名应该默认为小写开头,这也是java的命名规范,如果采用大写,在转换的过程中,会找不到属性而传值为null,如果必须使用大写,可以添加注解@jsonpropery
(6)@requestbody接收的javabean对象的属性如果声明为原始类型如int,在转换的过程中,如果值不存在,会生成默认值为0,这样一来,如果在后续的逻辑处理中,如果0是有意义的,则会出现错误,解决的办法是声明为封装类型如integer。
(7)request.getparametermap只能读取get方式url参数或post请求采用x-www-form-urlencode方式传递的参数,其他情况是读不到数据的
(8)template.getForObject()函数,传递的参数应该在url路径或参数后缀中,如果需要传递复杂数据对象,应该首选post方式。
架构师书籍下载: http://download.csdn.net/detail/pulma/9330601