我正在编写一个应用程序,其中我需要对某些对象进行CRUD操作。我需要能够为人类用户提供HTML页面,并为其他应用程序提供JSON。现在,我的网址看起来像“阅读”:
GET /foo/{id} -> Serves HTML GET /rest/foo/{id} -> Serves JSON etc.
这似乎有点多余。我宁愿有这样的事情:
GET /foo/{id}.html OR /foo/{id} -> Serves HTML GET /foo/{id}.json -> Serves JSON
Spring Boot可以做到吗?如果是这样,怎么办?
我知道如何返回JSON:
@RequestMapping(value = "/foo/{id}", method = RequestMethod.GET, produces = "application/json") public Object fetch(@PathVariable Long id) { return ...; }
我也知道如何返回HTML:
@RequestMapping("/app/{page}.html") String index(@PathVariable String page) { if(page == null || page.equals("")) page = "index"; return page; }
但是我不确定如何让控制器根据请求执行一个或另一个。
这是Spring Boot的默认行为。唯一的是,您必须标记其中之一@RequestMapping才能生成JSON。例:
@RequestMapping
@Controller class HelloController { // call http://<host>/hello.json @RequestMapping(value = "/hello", method = RequestMethod.GET, produces = "application/json") @ResponseBody public MyObject helloRest() { return new MyObject("hello world"); } // call http://<host>/hello.html or just http://<host>/hello @RequestMapping(value = "/hello", method = RequestMethod.GET) public String helloHtml(Model model) { model.addAttribute("myObject", new MyObject("helloWorld")); return "myView"; } }
有关更多信息,请访问:http : //spring.io/blog/2013/05/11/content-negotiation-using-spring- mvc和http://spring.io/blog/2013/06/03/content-negotiation- 使用视图