1、编写基本控制器
例子:
@Controller
@RequestMapping({"/", "/homepage"})
public class HomeController {
@RequestMapping(method=GET)
public String home() {
return "home";
}
}
2、测试控制器
例子:
package spittr.web;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.*;
import org.junit.Test;
import org.springframework.test.web.servlet.MockMvc;
public class HomeControllerTest {
@Test
public void testHomePage() throws Exception{
HomeController controller = new HomeController();
MockMvc mockMvc = standaloneSetup(controller).build();
mockMvc.perform(get("/")).andExpect(view().name("home"));
}
}
3、传递模型数据到视图中
不指定Model中key的例子:
@Controller
@RequestMapping("/spittles")
public class SpittleController {
private SpittleRepository spittleRepository;
@Autowired
public SpittleController(SpittleRepository spittleRepository){
this.spittleRepository = spittleRepository;
}
@RequestMapping(method=RequestMethod.GET)
public String spittles(Model model) {
model.addAttribute(spittleRepository.findSpittles(Long.MAX_VALUE, 20));
return "spittles";
}
}
显示声明模型的key的例子:
@RequestMapping(method=RequestMethod.GET)
public String spittles(Model model) {
model.addAttribute("spittleList", spittleRepository.findSpittles(Long.MAX_VALUE, 20));
return "spittles";
}
使用非Spring类型的java.util.Map代替Model的例子:
@RequestMapping(method=RequestMethod.GET)
public String spittles(Map model) {
model.put("spittleList", spittleRepository.findSpittles(Long.MAX_VALUE, 20));
return "spittles";
}
不返回视图名称,也不显示设定模型的例子:
@RequestMapping(method=RequestMethod.GET)
public List<Spittle> spittles(){
return spittleRepository.findSpittles(Long.MAX_VALUE, 20));
}
当处理器方法返回对象或者集合时,这个值会放到模型中,模型的key会根据其类型推断得出(本例中为spittleList)。而逻辑视图的名称将会根据请求路径推断得出,因为这个方法处理针对"/spittles"的GET请求,因此视图的名称将会时spittles(去掉开头的斜线)。