Spring 框架入门 - 自动类映射

简介

在Java EE逐渐没落的今天,Spring框架依然保持着强大的生命力。面试题中经常有它的身影,所以我就感觉到了学习的必要性;了解并实践了一些以后,发现Spring框架确实简化了很多问题,比如这篇博客要讲到的自动类映射,原来需要手动在业务代码里一行一行敲的内容由框架帮忙完成了,代码量减少了,便提高了工作效率。这里我们通过一个Item类的CRUD操作来总结一下我到目前为止的的Spring学习过程。

要实现的功能:item类的增删查改。Item的细节如下:

class Item {
    String name;
    String desc;
}

有名字和描述两个属性。我们要搭建一个web后端,能够实现与数据库的交互. 这里假设我们有一个ItemDAO类,来处理跟数据库连接有关的操作,细节略

interface ItemDAO {
    void insert(Item item);
    void update(Item item);
    Item get(String name);
    void delete(String name);
}

通常DAO类不会用接口来实现,这里为了简洁和代码能编译临时用一下。然后一个Java网络应用,我们用maven管理依赖,GitHub在这里 。复制粘贴pom.xml, web.xml ,一些该有的文件夹要建好,与web交互无关的细节处理完毕,下面进入正题。

Servlet 如何实现

我们要使用4个HTTP动词:GET, POST, DELETE and PUT. 对应到HttpServlet力的do*() 方法:

public class ItemServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) {
        // TODO, fill this up
    }
    public void doPOST(HttpServletRequest request, HttpServletResponse response) {
        // TODO, fill this up
    }
    public void doDELETE(HttpServletRequest request, HttpServletResponse response) {
        // TODO, fill this up
    }
    public void doPUT(HttpServletRequest request, HttpServletResponse response) {
        // TODO, fill this up
    }
}

用户要增加一个对象,发了一段JSON字符串过来

{"name": "box", "desc": "it is nice"}

在Servlet中,你需要先得到这段字符串

BufferedReader rd = new BufferedReader(new InputStreamReader(request.getInputStream()));
StringBuffer sb = new StringBuffer();
boolean first = true;
String line = null;
while ((line = rd.readLine()) != null) {
    if (first) {
        sb.append(line);
        first = false;
    } else {
        sb.append('\n' + line);
    }
}
String jsonString = sb.toString();

读着可以看到,我们需要费一番功夫才能得到JSON字符串。然后可以用阿里的fastjson库快速从JSON映射到类:

Item item = com.alibaba.fastjson.JSON.parseObject(Item.class, jsonString);

然后再调用DAO类去增删查改。

Spring MVC 如何实现

Spring框架会多用一些依赖,一个是springmvc,另一个jackson跟本文要说的自动类映射有关。需要在web.xml里配置一个DispatcherServlet 作为中央路由处理,另外加一个-servlet.xml 这里app可以替换成你的应用。可以从我的GitHub上复制粘贴。

Spring MVC用Controller来处理业务逻辑,注解会比较多。

@Controller
public class ItemController {
    @RequestMapping(method = RequestMethod.GET)
    public void doGet() {
        // TODO, fill this up
    }
    @RequestMapping(method = RequestMethod.PUT)
    public void doPut() {
        // TODO, fill this up
    }
    @RequestMapping(method = RequestMethod.POST)
    public void doPost() {
        // TODO, fill this up
    }
    @RequestMapping(method = RequestMethod.DELETE)
    public void doDelete() {
        // TODO, fill this up
    }
}

乍一看差距不大,但Spring MVC提供了这样的功能:

   @RequestMapping(method = RequestMethod.POST)
   public void doPost(@RequestBody Item item) {
       itemDAO.insert(item);
   }

一看就知道是什么意思,不用自己去处理IO了,Spring自动把用户发来的JSON转成了类。

使用这个功能还有一些条件,Bean里的Getter Setter要有,并遵从POJO规则,前端发来的JSON里的属性要和Bean的属性名保持一致,不然会有null出现。

总结

本文介绍了Spring MVC里一个我很喜欢的功能 - 自动类映射,并通过与Servlet实现方式的比较,说明了它的优势所在。

你可能感兴趣的:(JAVA,web,Spring)