当前位置: 首页 > 知识库问答 >
问题:

Spring MVC在endpoint上使用相同的路径来返回不同的内容?

钱凌
2023-03-14

我将使用一个非常基本的hello worldendpoint作为示例

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

如果我有这个endpoint,并且我希望能够 /hello并检索helloworld视图。

如果传入特定的请求参数(如内容类型),是否可以使用相同的路径以json的形式检索模型?

共有2个答案

阎宝
2023-03-14
匿名用户

您可以尝试使用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) { ... }

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

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

曹经业
2023-03-14

我不太明白你的意思。

如果您的意思是希望能够向hello发送请求,并获得两个不同的响应,以及不同的内容类型,那么您可以这样做。

RequestMapping将一个方法标识为请求处理程序,但它还提供了限制何时应该使用处理程序的选项。

在这种情况下,对于包含json的响应,应该在HTTP请求中使用“Accept”(接受)标头,并将其设置为“application(应用程序)/json”(代码),对于包含html的响应,应该将其设置为“text(文本)/html”(代码)。

然后,您可以有两个@Request estMap方法,例如

@RequestMapping(value = "/hello", produces = "application/json")
public SomeType handleJson() {...}

@RequestMapping(value = "/hello", produces = "text/html")
public String handleHtml() {...}

Spring将根据请求的接受头和方法的生成的值来确定使用哪种方法。

 类似资料:
  • 问题内容: 我将以一个非常基本的hello world终结点为例 如果我有此端点,并且希望能够转到/ hello并检索视图。 如果我传入诸如content-type之类的特定请求参数,是否可以使用SAME 路径将模型检索为json? 问题答案: 我不确定我理解你的意思。 如果您希望能够向发出请求并获得具有不同内容类型的两个不同响应,那么可以。 将方法标识为请求处理程序,但它也提供了一些选项来限制应

  • 问题内容: 我正在尝试使用单独的路线,但在我的React App中添加/编辑表单的组件相同,如下所示: 现在,在manageClient组件中,我解析查询参数(我在编辑路由中传递带有客户端ID的查询字符串),并根据传递的查询参数有条件地进行渲染。 问题在于这不会再次重新安装整个组件。假设打开了一个编辑页面,并且用户单击添加组件,URL发生了更改,但是该组件没有重新加载,因此保留在编辑页面上。 有办

  • 本文向大家介绍ASP的Server.MapPath()不同参数返回路径总结,包括了ASP的Server.MapPath()不同参数返回路径总结的使用技巧和注意事项,需要的朋友参考一下 在使用Server.MapPath()的时候,有很多的参数,什么绝对路径啊,相对路径啊,这些不复杂但是很容易弄混淆的东西,这里将他做一个整理。 如果当前的网站目录为E:\wwwroot 应用程序虚拟目录为E:\www

  • 我试图从绑定到xml的treeview中获取所选节点,其中使用的xml显示了以下特性,重复了许多同名节点 在SseltedNodeChanged函数中我写了: 但每当我单击Treeview节点时,它只选择第一个团队元素。 例如:每当我单击这两个节点,我总是在SseltedNode中获得First Team元素。数据路径 我已经阅读了很多堆栈溢出解决方案,但是我不想在Xpath中传递参数,我想通过从

  • 问题内容: 在IE7,IE8和Firefox上设置属性并返回不同的值: IE 8: IE 7: 火狐: 为什么存在这种差异? 在不使用jQuery的情况下,是否存在跨不同浏览器(IE8,IE7,Firefox)一致的等效属性? 问题答案: 这与浏览器的盒子模型有关。使用jQuery或其他JavaScript抽象库之类的东西来规范DOM模型。

  • } 我得到了下面的结果。但是在这个结果中,高亮显示的行具有相同的列名,但是别名不同。为什么hibernate会得到相同的Cloumn? 冬眠:删除表,如果存在hibernate_sequence hibernate:删除表(如果存在)UserDetails Hibernate:如果存在,则删除表车辆Hibernate:创建表hibernate_sequence(next_val bigint)En