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方法写入(这里会抛异常)。访问对应的虚拟路径会得到正常结果
@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的控制器方式,而具体的内容实现和返回由自己填写。