spring rest

@RestController
@RequestMapping(value = "/rest/user")
@SessionAttributes(value = {"intValue", "stringValue"})
public class RestUserController {
    static Map<Integer, UserInfo> users = Collections.synchronizedMap(new HashMap<Integer, UserInfo>());

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public List<UserInfo> getUserInfoList(){
        // 处理"/users/"的GET请求,用来获取用户列表
        // 还可以通过@RequestParam从页面中传递参数来进行查询条件或者翻页信息的传递
        List<UserInfo> list = new ArrayList<UserInfo>(users.values());
        return list;
    }

    @RequestMapping(value = "/", method = RequestMethod.POST)
    public String postUser(@RequestBody UserInfo userInfo){
        // 处理"/users/"的POST请求,用来创建User
        // 除了@ModelAttribute绑定参数之外,还可以通过@RequestParam从页面中传递参数
        users.put(userInfo.getId(), userInfo);
        return "success";
    }

    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public UserInfo getUserInfo(@PathVariable int id,
                                @RequestHeader("Accept-Encoding") String encoding,
                                @CookieValue("JSESSIONID") String cookie){
        System.out.println(encoding);
        System.out.println(cookie);
        // 处理"/users/{id}"的GET请求,用来获取url中id值的User信息
        // url中的id可通过@PathVariable绑定到函数的参数中
        return users.get(id);
    }

    //用put更新信息
    @RequestMapping(value = "/{id}", method = RequestMethod.PUT)
    public String putUser(@PathVariable int id,@RequestBody UserInfo userInfo){
        // 处理"/users/{id}"的PUT请求,用来更新User信息
        UserInfo userInfo1 = users.get(id);
        userInfo1.setSalt(userInfo.getSalt());
        userInfo1.setName(userInfo.getName());
        userInfo1.setRole(userInfo.getRole());
        userInfo1.setPassword(userInfo.getPassword());
        return "success";
    }


    /**
     * http://localhost:9000/rest/user/1?name=test
     * 此请求才能访问得到
     * params制定了参数的值
     * header指定了需要满足的header
     * @param id
     * @return
     */
    @RequestMapping(value = "/{id}", method = RequestMethod.DELETE, params = {"name=test"}, headers = {"host=localhost"})
    public String deleteUser(@PathVariable int id){
        users.remove(id);
        return "success";
    }

    /**
     * 会在发起请求前创建 , 方法中可以进行调用
     * @return
     */
    @ModelAttribute("hello")
    public String getModel(){
        System.out.println("-----------------hello-------------");
        return "world";
    }

    @ModelAttribute("intValue")
    public int getInteger(){
        System.out.println("-------------------intValue----------");
        return 10;
    }
    @ModelAttribute ( "user2" )
    public String getUser(){
        System. out .println( "---------getUser-------------" );
        return "user2";
    }

    /**
     * 当 @ModelAttribute 标记在方法上的时候,该方法将在处理器方法执行之前执行,然后把返回的对象存放在 session 或模型属性中,属性名称可以使用 @ModelAttribute(“attributeName”) 在标记方法的时候指定,若未指定,则使用返回类型的类名称(首字母小写)作为属性名称。关于 @ModelAttribute 标记在方法上时对应的属性是存放在 session 中还是存放在模型中,我们来做一个实验,看下面一段代码。
     * @param hello
     * @param num
     * @param user
     * @param writer
     * @param session
     * @throws IOException
     */
    @RequestMapping("/sayhello")
    public void sayHello(@ModelAttribute("hello") String hello,
                         @ModelAttribute("intValue") int num,
                         @ModelAttribute("user2") String user,
                         Writer writer,
                         HttpSession session) throws IOException{
        writer.write("Hello "+ hello+" , Hello " + user + num );
        writer.write("\r");
        Enumeration enume = session.getAttributeNames();
        while (enume.hasMoreElements())
            writer.write(enume.nextElement() + "\r" );


    }



}

 

posted @ 2017-08-28 14:39  一弦一仙  阅读(264)  评论(0编辑  收藏  举报