Estoy usando la primavera de arranque y he definido un método como este en mi controlador
@PostMapping("/update)
public void update(@RequestBody User user) {
...
}
Sin embargo, en mi solicitud posterior desde el cliente (frontend o cartero por ejemplo), tengo algo como esto:
{
"firstName" : "John",
"lastName" : "Doe",
"id" : 1234,
"metaInfoId" : "5457sdg26sg4636"
}
Lo que pasa es que mi POJO usuario sólo tiene firstName
, id
y lastName
campos de instancia en it.However en mi solicitud I have to send
metaInfoId
, así como para otras necesidades. Entonces, ¿cómo puedo recuperar o separado metaInfoId
y User
modelo en mi método de controlador de arriba?
¿Tengo que crear otra clase modelo llamado UserModelRequest
y añadir todos los User
campos, junto con metaInfoId
el campo y luego usar @RequestBody
? ¿Hay una manera de quitar simplemente metaInfoId
a partir de la solicitud y luego tomar todo lo demás y lo descarga en User
POJO? Usted puede hacer esto fácilmente en nodejs por ejemplo (solo empalmar su objeto y toma lo que necesita).
Entonces, ¿hay una manera de hacerlo en la primavera de Java sin tener que crear otra clase de modelo?
Puede anotar su POJO con @JsonIgnoreProperties(ignoreUnknown = true)
lo que los campos que no contiene son ignorados. Ex
@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
private int id;
private String firstName;
private String lastName;
... getters & setters ...
}
Además, no se debe incluir metadatos en el cuerpo de su solicitud resto. El lugar correcto para esta información estaría en las cabeceras. Esto cambiaría su método de firma a:
@PostMapping("/update)
public void update(@RequestBody User user, @RequestHeader(value="metaInfoId") String metaInfoId) {
...
}
Si debe agregar la información de la petición, entonces su necesitaría actualizar la clase POJO usuario para incluir este campo (o hacer que se extienda una clase con el campo metaInfoId)
Por último, usted realmente no desea crear un nuevo tipo. Puede cambiar la firma para aceptar un mapa y recuperar la información necesaria como:
@PostMapping("/update)
public void update(@RequestBody Map<String, Object> userMap) {
String metaInfoId = userMap.get("metaInfoId");
ObjectMapper mapper = new ObjectMapper(); // jackson's objectmapper
final User user = mapper.convertValue(userMap, User.class);
}