Im Folgenden meine Anwendungscodeändern @RequestBody Objekt basierend auf @PathVariable
@RequestMapping(value = "app/{version}/register", method = RequestMethod.POST, consumes = "application/json")
@ResponseBody
public RegisterMemberResponse registerMember(@Valid @RequestBody RegisterMemberRequest request,@PathVariable Integer version){
return registerservice.register(request);
}
für App-Version 1 meiner RegisterMemberRequest Klasse ist
public class RegisterMemberRequest{
@NotNull
private String firstName;
@NotNull
private String lastName;
//gatter & setter...
}
und für App-Version 2 meiner Anfrage Klasse ist
public class LatestRegisterMemberRequest extends RegisterMemberRequest{
@NotNull
private String middleName;
//getter & setter...
}
also wie kann ich meine registerMember() Methode so ändern, dass ich sowohl Version 1dienen kann2 Anfrage URI.
Also nach Ihrem ersten Absatz, wenn ich 10 Version der Anwendung habe ich 10 Methode schreiben und alles enthält 80-90% gleichen Code. Ich wollte nicht im zweiten Absatz sagen. – RBS
Natürlich stellen Sie einige weitere Methoden vor, aber Sie stellen auch mehr Ruheschnittstellen zur Verfügung. Wenn Sie eine gemeinsame Logik haben, können Sie das allgemeine Zeug leicht in eine eigene Methode extrahieren oder wahrscheinlich sogar 'registerV1()' von 'registerV2()' aufrufen. Wenn Sie einige Rest-Interfaces für die Öffentlichkeit bereitstellen, sollten Sie besser nicht zehn verschiedene Versionen derselben Schnittstelle unterstützen, da es dann sehr schwierig sein wird, Ihre API zu verwenden. –
Der zweite Abschnitt behandelt eine andere Option, die verschiedene Methoden bereitstellt, die jedoch auf dem Inhaltstyp-Header anstelle einer URL basieren. Ihre URL ist also immer 'app/register', wird aber mit verschiedenen Header-Werten' application/vnd + ABC.register-v1 + json' und 'application/vnd + ABC.register-v2 + json' aufgerufen. Aber alles in allem ist der bevorzugte Weg, robustere und rückwärtskompatible Apis zu bauen und daher nicht alle auto-magischen Validierungs-Sachen zu verwenden. Siehe https://en.wikipedia.org/wiki/Robustness_principle –