为什么具有相同 URL 但产生不同 MediaType 的 RequestMappings 有效?

如果我有相同的 2 requestMapping URL,params(no params) 并生成类型(JSON),我想了解为什么 Spring 应用程序会启动。默认情况下,这些方法正在生成 JSON(我测试了 XML 和其他方法,但出现 500 错误,我没有依赖项。我想知道这是 Intellij 还是 Spring 问题,或者如果我将 Get 放在第二个,那么启动并覆盖第二个 produces = MediaType.APPLICATION_JSON_VALUE 是否正常我也收到错误。这是有效的示例:

@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<ExampleDTO>> getMethodd1() {
    return ResponseEntity.ok(ExampleStore.available);
}
@GetMapping()
public ResponseEntity<List<ExampleDTO>> getMethodd2() {
    return ResponseEntity.ok(ExampleStore.available);
}

这个例子不再开始:

@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<ExampleDTO>> getMethodd1() {
    return ResponseEntity.ok(ExampleStore.available);
}
@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<ExampleDTO>> getMethodd2() {        
    return ResponseEntity.ok(ExampleStore.available);
}

PS:我知道请求的参数或网址应该不同。

mei96818968 回答:为什么具有相同 URL 但产生不同 MediaType 的 RequestMappings 有效?

我认为如果你再想一想就很明显了。查看具有相同 url 的这三个控制器方法:

@GetMapping(path = "/sameurl")
public String text() throws JsonProcessingException {
    return "some data\n";
}

@GetMapping(path = "/sameurl",produces = MediaType.APPLICATION_XML_VALUE)
public String xml() throws JsonProcessingException {
    return "<data>some data</data>\n";
}

@GetMapping(path = "/sameurl",produces = MediaType.APPLICATION_JSON_VALUE)
public String json() throws JsonProcessingException {
    return "{\"data\": \"some data\"}\n"; 
}

正如您在问题中已经看到的,区别它们的是每种方法产生的东西。

实际调用的方法由客户端接受什么来选择,这使您可以灵活地在控制器级别选择如何处理请求,而无需自己检查接受类型。

使用上述 API url 和相应的调用结果:

curl -H "Accept:application/someformat" localhost:8080/sameurl

一些数据

curl -H "Accept:application/json" localhost:8080/sameurl

{"data": "一些数据"}

curl -H "Accept:application/xml" localhost:8080/sameurl

一些数据

那么真正的重复是具有相同 URL 和相同类型的请求映射来生成。不再有区分属性,Spring 无法分辨使用哪种方法。

本文链接:https://www.f2er.com/228654.html

大家都在问