您的位置:首页 > 其它

某教育平台项目开发之--使用SSM框架开发过程遇到的问题总结

2016-08-14 14:50 801 查看
本次开发一个系统,前端是Android端,交互方式用json。

一、关于
@RequestBody
@JsonIgnoreProperties(ignoreUnknown=true)
的问题

前端用json数据传输。json数据格式如下:

{
"mobileNum" : "13800138000",
“userName”:”df54df”,
"Password" : "123456"
}


后端用一个对象封装传递过来的数据,需要用到一个注解
@RequestBody
,这个注解的作用就是封装前端传递过来的Json数据到紧跟该注解的对象,那么会出现3种情况(假设封装的对象是User user,并且要求json数据的命名与User里面的属性命名一致):

(1)User里面的属性与json数据的属性一致(包括变量名和数量),那么这是最理想的情况;

(2)User里面的属性比json数据的属性多,但其他匹配,那么User里面的数据将被设置为默认值(如果是对象型,则是Null)

(3)User里面的属性比json数据的属性少。这时候可以用
@JsonIgnoreProperties(ignoreUnknown=true)
简单地忽略掉从JSON(由于在应用中没有完全匹配的POJO)中获得的所有“多余的”属性。例如:

@JsonIgnoreProperties(ignoreUnknown = true)
@Table(name="user")
public class User extends Unique{
@Column(name="mobile_num")
private String mobileNum;

@Column(name="user_name")
private String userName;

@Column(name="password")
private String password;

@Column(name="has_card")
private int hasCard;

@Column(name="salt")
private String salt;

.....忽略以下getter、setter代码
}


二、关于无法正确解析前端传来的json数据

注意提醒前端用的编码方式跟后台一样,如果后端设置了json的格式是
application/json;charset=UTF-8
,那么前端也要一样。在开发中,没加
@RequestBody
的时候,系统能进入对应的方法体,只是想要封装json数据的对象获取不到数据,但是加了
@RequestBody
却进入不了方法体。报的错误是不支持某种格式。

三、当User里面的属性比json数据的属性少时,开发中又不想写个拓展类,但是多余的属性(比如“type”)又在方法体起作用。例如:

type=0,进入注册用户的代码块;type=1,进入找回密码的代码块,这时候的解决办法就是:

@RequestMapping(value="/login/{type}",method= RequestMethod.POST)
public @ResponseBody String login(HttpServletRequest request, @PathVariable("type") String type,String timestamp, @RequestBody User user){
if("0".equals(type)){
//注册用户的代码块
}else{
//找回密码的代码块
}
}


三、关于用@RequestBody封装前端传递过来的JSON数据

这是我在开发过程中无意间在百度看到的,可以用下面两种方法对前端的JSON数据进行封装。

一、用Map

method(@RequestBody Map map) {

map.get("code");

}


二、用阿里巴巴的JSONObject (在开发书香校园APP的后端,我用的是这个,很实用,不必在担心前面所说的三种情况了)

method(@RequestBody JSONObject jsonObj) {
jsonObj.getString("code");
}


联想:

数据表里面的字段一般都对应一个POJO类的属性,但是有些需求需要写复合查询语句,这样必定设计到两张表,select到的字段可能是包含两张表的某些内容,按照以往的做法,我会再写一个VO类,但是现在找到一个方法解决这个问题,不用写过多的VO类
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: