一个项目的FAQ

来源:互联网 发布:php bt下载 编辑:程序博客网 时间:2024/06/07 08:00

FAQ:Frequently Asked Questions

1. 服务端返回的JSON中的日期格式如何设置?

1)JS端直接设置(new Date(长整形).toLocaleDateString())
2)编写日期转换类继承JsonSerializer重写相关方法,然后在
对应实体对象的get方法上使用@JsonSerialize注解进行
标注要使用的类型转换器.

2. Tomcat 启动时端口号被占用了?

1)window: jdk/bin 中去执行shutdown.bat
2)linux:
ps -ef|grep tomcat
kill -9 进程号(pid)
3)修改端口号(server.xml)

3. Spring 中是如何为使用了@Resouce或 @Autowired

等注解修饰的属性注入值的?

注解应用规则:

@Resource (默认按名字注入,没有找到名字按类型注入)
@Autowired(默认按类型注入,假如没找可能会注入失败)
@Autowired假如希望按名字注入

注解应用原理:可以通过反射为使用了此注解的属性注入相关值.

4. Spring中@ResponseBody注解的作用

将控制层方法的返回值通过第三方API(例如Jackson)转为
Json字符串,然后通过网络传输到客户端.

具体转换过程说一说:
1)JavaBean对象:调用对象的getXXX方法获取值.
2)Map对象:调用map的get(String key)获取值.

例如:
JsonResult—>”{“state”:1,”message”:”ok”,data:{}}”

5. 项目中JsonResult这个类是如何封装的异常信息的

1)异常发生时
2)异常处理类中 : new JsonResult(异常对象);

6. 项目添加时,在projectDao的insertObject方法中,假如

参数使用了@Param修饰,程序在运行时会出错,为什么?

insertObject(Project entity);没有@Param注解修饰
insertObject(@Param(“ety”) Project entity);

当mapper中写与此
insertObject(@Param(“entity”) Project entity)
方法绑定的mapper文件时,它的值再获取时需要
#{ety.属性},例如#{ety.code}

7. 在添加项目信息时,对模态框的保存按钮上绑定的click

事件为什么需要解绑?

因为可能出现数据多次重复提交问题,应该模态框隐藏时
解除事件绑定操作.

8. MyBatis 中$和#取值时有什么不同

#{}会用?代替 会防止sql注入问题

9. 日期转换时@DateTimeFormat和@JsonSerialize有什么不同?

@DateTimeFormat 注解应用
1)归属Spring框架
2)定义服务端能接收的日期格式(spring默认格式yyyy/MM/dd)

@JsonSerialize 注解应用.
1)归属Jackson
2)再将控制层返回的对象转换json字符串时,可以按照 @JsonSerialize
定义的日期格式进行转换(默认会转换为长整型)

10. MyBatis 映射文件中如何在resultType属性或paramterType

属性上使用自己定义的类的别名.
1)首先在mybatis配置文件中定义别名(两种方式)
例如:

<typeAliases>  <package name="cn.tedu.ttms.system.entity"/>  <package name="cn.tedu.ttms.product.entity"/></typeAliases> 或者<typeAliases>   <typeAlias type="cn.tedu.ttms.product.entity.Team"                       alias="team"/>   <typeAlias type="cn.tedu.ttms.product.entity.Project"                      alias="project"/></typeAliases>

2)在映射文件中使用别名

11. Dao接口中的方法参数一般会如何定义?

Project findObjectById(Integer id);List<Project>findPageObjects(@Param("name") String name,@Param("valid")  Integer valid,@Param("startIndex") Integer startIndex,@Param("pageSize") Integer pageSize) 假如findPageObjects方法没有使用@Param注解 底层系统会将dao中的参数以及值存储到map map.put("param1",name); map.put("param2",valid); ..... 我们在mapper文件中使用值时可以#{param1};#{param2}; 假如findPageObjects方法使用了@Param注解对参数 进行了定义,底层系统会将dao中的参数及其值按照如下 规则存储到map. map.put("name",name); map.put("valid",valid); ......我们在mapper文件中使用值时可以#{name};#{valid};

int updateObject(Project entity);

mapper中直接使用#{对象get方法去掉get后的那个单词}取值

int updateObject(@Param(“e”) Project entity);

mapper中使用#{e.对象get方法去掉get后的那个单词}取值

12. 为什么返回JsonResult

 /*          刷新整个project_list.jsp的一种写法(不推荐)       @RequestMapping("doValidById")       public String doValidById(Integer valid,              String ids){          projectService.validById(valid, ids);          return "redirect:listUI.do?t="+System.currentTimeMillis();       }      */      @RequestMapping("doGetPageObjects")      @ResponseBody      public JsonResult doGetPageObjects(                  String name,                  Integer valid,                  Integer pageCurrent){          log.info("name="+name);//乱码          log.info("valid="+valid);          log.info("pageCurrent="+pageCurrent);          Map<String,Object> map=          projectService.findPageObjects(                  name,valid,pageCurrent);          log.info("map="+map);          return new JsonResult(map);//map对象转换为json串的表示形式如下          /*{           * state:1,           * message:"ok"           * data:           * {             "list":[{id:1,name:"环球游",...},{...}]              "pageObject":{pageCurrent:1,pageCount:2,...}             }             }           */

13. 客户端传的Json param 如何转为对象

 /**       * name="东欧游"&code="..."&beginDate="..."       * spring 获得参数数据以后会对数据进行解析然后       * 调用project对象的setXXX方法将数据存储到project       * 对象.       */      @RequestMapping("doSaveObject")      @ResponseBody      public JsonResult doSaveObject(Project entity){         projectService.saveObject(entity);         return new JsonResult("insert ok");      }
原创粉丝点击