我将使用一个非常基本的hello world端点作为示例
@RequestMapping("/hello")
public String hello(@RequestParam(value="name", required=false, defaultValue="World") String name, Model model) {
model.addAttribute("name", name);
return "helloworld";
}
如果我有这个端点,我希望能够转到/ hello并检索helloworld
视图。
如果我传入一个像内容类型这样的特定请求参数,是否可以使用SAME /hello
路径将模型检索为json?
答案 0 :(得分:6)
我不确定我明白你的意思。
如果您的意思是希望能够向/hello
发送请求并获得两种不同的内容类型的答案,那么您可以这样做。
@RequestMapping
将方法标识为请求处理程序,但它还提供了限制何时应使用处理程序的选项。
在这种情况下,您应该在HTTP请求中使用Accept
标头,并将其设置为application/json
以获取包含JSON的响应,并将text/html
设置为包含HTML的响应。
然后您可以使用两个@RequestMapping
方法,例如
@RequestMapping(value = "/hello", produces = "application/json")
public SomeType handleJson() {...}
@RequestMapping(value = "/hello", produces = "text/html")
public String handleHtml() {...}
Spring将根据请求的Accept
标头和方法的produces
值来确定使用哪种方法。
答案 1 :(得分:2)
您可以尝试使用RequestMapping
参数选项传入参数。这确实需要修改URL,但映射仍然相同,并且可以添加没有params标记的映射方法作为默认值。
@RequestMapping(value="/hello" params= param1)
public returnType method(@RequestParam("param1") p) { ... }
@RequestMapping(value="/hello" params= param2)
public differentreturnType method2(@RequestParam("param2") p) { ... }
所以要处理第一个请求网址:http://etc.com/hello?param1=x
和第二个http://etc.com/hello?param2=y
。
@RequestMapping
文档的参数部分:http://docs.spring.io/spring/docs/4.0.5.RELEASE/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html#params--