@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" );
}
}