使用Spring MVC同一路径上的终点返回不同的内容?(Spring MVC using same

2019-10-20 06:44发布

我将使用一个非常基本的Hello World端点作为一个例子

 @RequestMapping("/hello")
 public String hello(@RequestParam(value="name", required=false, defaultValue="World") String name, Model model) {
     model.addAttribute("name", name);
     return "helloworld";
 }

如果我有这样的终点,我希望能够去/打招呼和检索helloworld视图。

是否有可能对我来说,使用相同的/hello路径检索模式作为JSON如果我通过在诸如内容类型的特定要求PARAM?

Answer 1:

我不知道我明白你的意思。

如果你的意思是你要能够请求发送到/hello ,并得到两个不同的反应,用不同的内容类型,是的,你可以做到这一点。

@RequestMapping标识方法为是请求处理程序,而且还提供了选项时,应使用的处理程序限制。

在这种情况下,你应该使用Accept头在你的HTTP请求并将其设置为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() {...}

弹簧将确定使用基于该请求的该方法Accept报头,并且所述方法的produces值。



Answer 2:

你可以尝试传递使用参数RequestMapping params项。 这确实需要修改URL,但是映射仍然是相同的,没有一个PARAMS标签映射的方法可以添加为默认值。

@RequestMapping(value="/hello" params= param1)
public returnType method(@RequestParam("param1") p) { ... }

@RequestMapping(value="/hello" params= param2)
public differentreturnType method2(@RequestParam("param2") p) { ... }

因此,处理第一,请求URL: http://etc.com/hello?param1=x和第二http://etc.com/hello?param2=y

的PARAMS部分@RequestMapping文档: http://docs.spring.io/spring/docs/4.0.5.RELEASE/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html#params--



文章来源: Spring MVC using same path on endpoints to return different content?