背景:最近为了做seo优化(虽然没啥用)但是业务有需求,各种奇葩路径访问。所以决定写这篇文章,让控制层随心所欲的映射和获取参数。
废话不多说直接上java代码,每一个方法和都有注释说明
package com.duit.controller.user;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;import com.common.entity.User;
import com.common.utils.log.ILogUtil;
/**
* 参数Model model(实现类为modeMap),HttpServletRequest req ModelMap modeMap可以不写自己定义
* model ModelMap会写数据必须作为参数 否则html模板无法获得绑定信息 @RequestMapping("test.html") 单路径
* 可以映射任何路径
* @RequestMapping(value = { "", "/page", "page*", "view" }); 多路径
* @RequestMapping(value = { "", "/page", "page*", "view" } ,method = RequestMethod.GET) 改变方式 快捷注解
* @GetMapping 主要是get 和post
* @PostMapping
* @PutMapping
* @DeleteMapping
* @PatchMapping
*
* @RequestParam(value = "limit", required = false) 修改参数变量和必填校验 默认必填 不传报400
*
* @author lichengdu
*
*/
@Controller
@RequestMapping("/user")
public class UserController {
/**
* 无参但是要绑定对象到模板页面 不传model无法回传
* @return
*/
@RequestMapping({ "/noParams.shtml" })
public String noParams(Model model) {
Map<String, Object> userMap = new HashMap<String, Object>();
userMap.put("name", "lichengdu");
model.addAttribute("userMap", userMap);
return "/user/show";
}
/**
* 和上面的没有区别 一个是接口一个是实现类
* @param modelMap
* @return
*/
@RequestMapping({ "/noParamsMap.shtml" })
public String noParams(ModelMap modelMap) {
Map<String, Object> userMap = new HashMap<String, Object>();
userMap.put("name", "lichengdu");
modelMap.addAttribute("userMap", userMap);
return "/user/show";
}
/**
* 请求req ModelAndView 绑定对象可以脱离model传参
*
* @param req
* @return
*/
@RequestMapping(value = "/req.shtml")
public ModelAndView req(HttpServletRequest req) {
Map<String, Object> userMap = new HashMap<String, Object>();
userMap.put("name", "lichengdu");
ModelAndView mv = new ModelAndView();
mv.addObject("userMap", userMap);
mv.setViewName("/user/show");
return mv;
}
@RequestMapping(value = "/model.html")
public String model(Model model) {
Map<String, Object> userMap = new HashMap<String, Object>();
userMap.put("msg", "成功");
userMap.put("code", 0);
List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
Map<String, Object> data1 = new HashMap<>();
data1.put("name", "dudu");
data1.put("age", 1);
dataList.add(data1);
Map<String, Object> data2 = new HashMap<>();
data2.put("name", "dudu2");
data2.put("age", 1);
dataList.add(data2);
userMap.put("data", dataList);
model.addAttribute("userMap", userMap);
model.addAttribute("dataList", dataList);
return "/user/show";
}
@RequestMapping(value = "/modelAndReq.html")
public String modelAndReq(ModelMap modeMap, HttpServletRequest req) {
// 获取请求路径动态路径不用写死
ILogUtil.info(req.getServletPath());
Map<String, Object> userMap = new HashMap<String, Object>();
userMap.put("msg", "成功");
userMap.put("code", 0);
List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
Map<String, Object> data1 = new HashMap<>();
data1.put("name", "dudu");
data1.put("age", 1);
dataList.add(data1);
Map<String, Object> data2 = new HashMap<>();
data2.put("name", "dudu2");
data2.put("age", 1);
dataList.add(data2);
userMap.put("data", dataList);
modeMap.addAttribute("userMap", userMap);
modeMap.addAttribute("dataList", dataList);
return "/user/show";
}
/**
* urlParams '@PathVariable'路径参数 默认url参数 '@RequestParam'修改映射
* http://127.0.0.1:8442/user/7,6/dudu/urlParams.shtml?id=1&phone=17340217156
*
* @param tags
* @param name
* @param id
* @param phone
* @param model
* @return
*/
@RequestMapping(value = "/{tags}/{name}/urlParams.shtml")
public String urlParams(@PathVariable String tags, @PathVariable String name, String id,
@RequestParam("phone") String myPhone, Model model, HttpServletRequest req) {
// 获取请求路径动态路径不用写死
ILogUtil.info(req.getServletPath());
ILogUtil.info("id===>" + id);
Map<String, Object> userMap = new HashMap<String, Object>();
userMap.put("name", "lichengdu");
model.addAttribute("userMap", userMap);
return "/user/show";
}
/**
* otherParams http://127.0.0.1:8442/user/dudu/67.shtml
*
* @param name
* @param model
* @return
*/
@RequestMapping(value = "/{name}/{code}.shtml")
public String otherParams(@PathVariable String name, @PathVariable String code, Model model,
HttpServletRequest req) {
// 获取请求路径动态路径不用写死
ILogUtil.info(req.getServletPath());
Map<String, Object> userMap = new HashMap<String, Object>();
userMap.put("name", "lichengdu");
model.addAttribute("userMap", userMap);
return "/user/show";
}
/**
* urlParams
*
* @param request
* @param response
*/
@RequestMapping(value = "/urlParam.shtml")
public String urlParam(HttpServletRequest request, HttpServletResponse response, Model model) {
String username = request.getParameter("username");
String password = request.getParameter("password");
ILogUtil.info(username);
ILogUtil.info(password);
Map<String, Object> userMap = new HashMap<String, Object>();
userMap.put("name", "lichengdu");
model.addAttribute("userMap", userMap);
return "/user/show";
}
/**
* 直接参数接收 urlParamSimple '@RequestParam'可以指定映射
*
* @param request
* @param response
*/
@RequestMapping(value = "/urlParamSimple.shtml")
public String urlParamSimple(String username, @RequestParam("password") String pwd, Model model) {
ILogUtil.info(username);
ILogUtil.info(pwd);
Map<String, Object> userMap = new HashMap<String, Object>();
userMap.put("name", "lichengdu");
model.addAttribute("userMap", userMap);
return "/user/show";
}
/**
* 对象接收 User
*
* @param request
* @param response
*/
@RequestMapping(value = "/urlParamObject.shtml")
public String urlParamObject(User user, Model model) {
ILogUtil.info(user.getUsername());
ILogUtil.info(user.getPassword());
Map<String, Object> userMap = new HashMap<String, Object>();
userMap.put("name", "lichengdu");
model.addAttribute("userMap", userMap);
return "/user/show";
}
/**
* 对象接收 User
*
* @param request
* @param response
*/
@RequestMapping(value = "/array.shtml")
public String array(int[] ids, Model model) {
for (int i : ids) {
ILogUtil.info(i + "");
}
Map<String, Object> userMap = new HashMap<String, Object>();
userMap.put("name", "lichengdu");
model.addAttribute("userMap", userMap);
return "/user/show";
}
}