ssm实现crud_使用rest风格的uri、服务端返回json数据(3)

来源:互联网 发布:js 函数对象的构造函数 编辑:程序博客网 时间:2024/05/22 10:34

1、配置web.xml文件来支持rest风格

    <filter>        <filter-name>HiddenHttpMethodFilter</filter-name>        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>HiddenHttpMethodFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>

如上配置后,在post的请求数据中添加”_method=PUT”标识为put请求,delete类似,此时不能将请求直接设为PUT,必需使用POST,让filter来转换。因为在页面直接发put请求时,需要添加spring的HttpPutFormContentFilter拦截器,因为tomcat对put的请求不进行数据封装,配置如下:

    <!--解决put请求数据tomcat不封装的问题-->    <filter>        <filter-name>HttpPutFormContentFilter</filter-name>        <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>HttpPutFormContentFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>

2、让服务端返回json数据

在maven配置文件中添加:

    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->    <dependency>      <groupId>com.fasterxml.jackson.core</groupId>      <artifactId>jackson-databind</artifactId>      <version>2.8.9</version>    </dependency>

在控制器的对应方法上添加注解@ResponseBody, 例如:

    @ResponseBody    @RequestMapping(value = "/user/{id}",method = RequestMethod.GET)    public Msg getUser(@PathVariable("id")Integer id){        User user=userService.getUser(id);        return Msg.success().add("user",user);    }

其中@PathVariable("id") 指明对应参数由@RequestMapping(value = "/user/{id}",method = RequestMethod.GET) 中的id获得。
控制器完整代码如下:

package cn.mk95.www.ssm_crud.controller;import cn.mk95.www.ssm_crud.bean.Msg;import cn.mk95.www.ssm_crud.bean.User;import cn.mk95.www.ssm_crud.service.UserService;import com.github.pagehelper.PageHelper;import com.github.pagehelper.PageInfo;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.*;import java.util.ArrayList;import java.util.List;/** * Created by yyh on 2017/7/14. */@Controllerpublic class UserController {    @Autowired    UserService userService;    //使用json,需要jackson包将对象转换成json    @RequestMapping("/jsonUserList")    @ResponseBody    public Msg getUsers(@RequestParam(value = "pn",defaultValue = "1")int pn){        PageHelper.startPage(pn,5);//在要分页查询的方法前指定页数和每页的数据数量        List<User> users=userService.findAll();        //使用pageoinfo包装查询后的结果,封装了详细的分页信息,包括数据,传入连续显示的页数        PageInfo pageInfo=new PageInfo(users,5);        return  Msg.success().add("pageinfo",pageInfo);    }    @ResponseBody    @RequestMapping(value = "/user",method = RequestMethod.POST)    public Msg saveUser(User user){        userService.saveUser(user);        return Msg.success();    }    @ResponseBody    @RequestMapping(value = "/user/{id}",method = RequestMethod.GET)    public Msg getUser(@PathVariable("id")Integer id){        User user=userService.getUser(id);        return Msg.success().add("user",user);    }    /**     * uri中的userId与user对象的属性对应     * 在页面直接发put请求时,需要添加spring的HttpPutFormContentFilter拦截器,因为tomcat对put的请求不进行数据封装     * 发post请求在参数后接"&_method=put"就可以不用配置拦截器     * @param user     * @return     */    @ResponseBody    @RequestMapping(value = "/user/{userId}",method = RequestMethod.PUT)    public Msg updateUser(User user){        userService.updateUser(user);        return Msg.success();    }    @ResponseBody    @RequestMapping(value = "/user/{ids}",method = RequestMethod.DELETE)    public Msg deleteUser(@PathVariable("ids") String ids){        if(ids.contains("-")){            String[] str_ids=ids.split("-");            List<Integer> int_ids=new ArrayList<Integer>();            for(String id:str_ids){                int_ids.add(Integer.parseInt(id));            }            userService.deleteBatch(int_ids);        }else{            Integer id=Integer.parseInt(ids);            userService.deleteUser(id);        }        return Msg.success();    }    @RequestMapping("/list")    public String getUsers(@RequestParam(value = "pn",defaultValue = "1")int pn, Model model){        PageHelper.startPage(pn,5);//在要分页查询的方法前指定页数和每页的数据数量        List<User> users=userService.findAll();        //使用pageoinfo包装查询后的结果,封装了详细的分页信息,包括数据,传入连续显示的页数        PageInfo pageInfo=new PageInfo(users,5);        model.addAttribute("pageinfo",pageInfo);        return "list";    }}

UserSerivce完整代码:

package cn.mk95.www.ssm_crud.service;import cn.mk95.www.ssm_crud.bean.User;import cn.mk95.www.ssm_crud.bean.UserExample;import cn.mk95.www.ssm_crud.dao.UserMapper;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.List;/** * Created by yyh on 2017/7/14. */@Servicepublic class UserService {    @Autowired    UserMapper userMapper;    public List<User> findAll() {        return  userMapper.selectByExampleWithTeam(null);    }    public void saveUser(User user) {        userMapper.insertSelective(user);    }    public User getUser(Integer id) {        return userMapper.selectByPrimaryKey(id);    }    public void updateUser(User user) {        userMapper.updateByPrimaryKeySelective(user);    }    public void deleteUser(Integer id) {        userMapper.deleteByPrimaryKey(id);    }    public void deleteBatch(List<Integer> int_ids) {        UserExample example=new UserExample();        UserExample.Criteria criteria=example.createCriteria();        criteria.andUserIdIn(int_ids);        userMapper.deleteByExample(example);    }}

项目完整代码:https://github.com/1114951496/ssm-crud

原创粉丝点击