@RequestBody primavera sin necesidad de utilizar un POJO?

theprogrammer:

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, idy lastNamecampos 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 metaInfoIdy Usermodelo en mi método de controlador de arriba?

¿Tengo que crear otra clase modelo llamado UserModelRequesty añadir todos los Usercampos, junto con metaInfoIdel campo y luego usar @RequestBody? ¿Hay una manera de quitar simplemente metaInfoIda partir de la solicitud y luego tomar todo lo demás y lo descarga en UserPOJO? 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?

mad_fox:

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);
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=199074&siteId=1
Recomendado
Clasificación