Ich habe die folgende Controller (nach Rails Namenskonvention)Spring MVC Routen falsche Aktion
@RestController("/vehicles")
public class VehiclesController {
@GetMapping
public Iterable<Vehicle> index(
@RequestParam(defaultValue = "1") int page,
@RequestParam(defaultValue = "25") int per
) {
...
}
@GetMapping("/{id}")
public Vehicle show(@PathVariable long id) {
...
}
@PostMapping
public Vehicle create(@RequestBody Vehicle vehicle) {
...
}
@PatchMapping("/{id}")
public void update(@PathVariable long id, @RequestBody Vehicle params) {
...
}
@DeleteMapping("/{id}")
public void destroy(@PathVariable long id) {
...
}
}
Jedes Mal, wenn ich die Anfrage senden
GET /vehicles
Ich erwarte, dass die Anforderung an die index
Verfahren geleitet wird , aber es wird tatsächlich an die show
-Methode weitergeleitet, die dann fehlgeschlagen ist, um den Inhalt zu liefern, da das Framework "vehicles"
nicht in long
konvertieren kann. Hier ist die Fehlermeldung:
Failed to bind request element: org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'long'; nested exception is java.lang.NumberFormatException: For input string: "vehicles"
Gibt es etwas falsch in meinem Code? Danke im Voraus.
Danke. Aber ich frage mich, warum man eine benannte Controller-Instanz braucht. –
Alle Controller werden trotzdem benannt (Klassenname beginnt mit Kleinbuchstaben). Es ist nur eine Konvention, die für alle ähnlichen Annotationen wie '@ Service',' @ Component' verwendet wird. Möglicherweise möchten Sie den Namen ändern, wenn eine Bean mit demselben Namen bereits registriert ist, z. B. durch Abhängigkeit von Drittanbietern. Ich hatte so einen Fall mit Spring Social, aber vor langer Zeit kann ich mich nicht an Details erinnern. –