Ich möchte einen Interceptor erstellen, der einen Wert an die @RequestBody
durch Bedingung schreibt. Aber wie kann ich abfangen, bevor die @PostMapping
vom Frühjahr aufgerufen wird?Wie kann @RequestBody aufgerufen werden, bevor @PostMapping aufgerufen wird?
@RestController
public class PersonServlet {
@PostMapping("/person")
public void createPerson(@RequestBody Person p) {
//business logic
}
class Person {
String firstname, lastname;
boolean getQueryParamPresent = false;
}
}
Dann schicke ich die POST
Körper:
{
"firstname": "John",
"lastname": "Doe"
}
Um url: localhost:8080?_someparam=val
Mein Ziel ist es zu erkennen, wenn eine Abfrage param vorhanden ist, und dann schreiben Sie direkt an das Person
Objekt, das wurde aus dem POST
Körper generiert.
Ich weiß, ich könnte dies leicht innerhalb der Servlet-Methode erreichen. ABER da dies nur ein Beispiel ist, möchte ich diese Logik global auf alle Anfragen anwenden. Um also nicht den gleichen Code-Aufruf bei jeder Anfrage zu wiederholen, hätte ich gerne eine Art Interceptor, um direkt auf das generierte Objekt zu schreiben (Reflektion wäre in Ordnung).
Aber: ist das möglich? Welche Methode wird im Frühjahr vor der @PostMapping
ausgeführt? Vielleicht könnte man dort einhaken?
Scheint wie ein guter Platz für einen MVC HandlerInterceptor. –
Können Sie ein Beispiel geben? – membersound
Dieser Artikel bietet ein gutes Beispiel. Aber Sie müssen möglicherweise einige manuelle JSON-Manipulation durchführen. https://examples.javacodegeeks.com/enterprise-java/spring/mvc/spring-mvc-interceptor-tutorial/ –