SpringMVC中两种Restful风格的实现方式

2019-08-29  本文已影响0人  薛定谔的猫狗

一种是使用方法返回值交给SpringMVC,SpringMVC内部使用Jackson自动生成,一种是通过得到ServletResponse,通过利用Jackson手动生成的json后,写进ServletResponse中返回。
代码如下:

    @ResponseBody
    @RequestMapping("restone")
    public void getRestOne()
    {
        ObjectMapper objectMapper = new ObjectMapper();
        Message message = new Message();
        message.setTitle("zxc");
        message.setContent("zixingc");
        String resp = "";
        try
        {
             resp = objectMapper.writeValueAsString(message);
        } catch (JsonProcessingException e)
        {
            e.printStackTrace();
        }
        try
        {
            ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getResponse().getWriter().write(resp);
        } catch (IOException e)
        {
            e.printStackTrace();
        }
    }

我们使用
((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getResponse();得到ServletResponse,通过getWrite().write方法写入(这里会抛异常)。访问对应的虚拟路径会得到正常结果

image.png
    @ResponseBody
    @RequestMapping("resttwo")
    public Message getRestTwo()
    {
        Message message = new Message();
        message.setTitle("zxc");
        message.setContent("zixingc");
        return message;
    }

这里通过返回Message,交给SpringMVC内部进行json生成,我认为SpringMVC也应该是使用的第一种方法进行json生成放入ServletResponse中完成json返回的。

这两种方法我认为各有各的好处,使用第二种应该是使用SpringMVC完成rest的标准返回方式(这里忽略了GET、POST等等HTTP协议的请求),能大大减少代码量。但是我个人认为第一种方式要灵活许多,它只是借助了SpringMVC的控制器方式,而具体的内容实现和返回由自己填写。

上一篇下一篇

猜你喜欢

热点阅读