¿Cómo hacer punto final controlador de conseguir dos objetos diferentes en la primavera de Java?

JJ: Redikes

Tengo un servidor construido con Java y primavera.

Lo que estoy tratando de hacer es que mi controlador con el mismo punto final obtendrá dos objetos diferentes.

Este es un ejemplo de lo que quiero decir:

Sé que puedo hacer eso:

  public class Option1{
   private String name;
   ...
     //getter and setter
    }

public class Option2{
 private Long id;
  ...
//getter and setter
}

@Controller
public class Controller{

 @RequestMapping(value = "service/getData/option1", method = RequestMethod.POST)
 @ResponseBody
 public String searchProv(@ResponseBody Option1 data1){
  return "option1"
   }

@RequestMapping(value = "service/getData/option2", method = RequestMethod.POST)
@ResponseBody
public String searchProv(@ResponseBody Option2 data2){
  return "option2"
  }
}

pero me pregunto si es posible pasar diferentes objetos JSON para el mismo punto final y hacer lo siguiente:

 @Controller
public class Controller{

 @RequestMapping(value = "service/getData", method = RequestMethod.POST)
 @ResponseBody
 public ResponseEntity<Any> getData(@ResponseBody Option1And2 data){
if(data instanceof Option1){
  return return ResponseEntity<Any>(data.name,HttpStatus.OK)
}        
if(data instanceof Option2){
   return ResponseEntity<Any>(data.id,HttpStatus.OK)
}
 return ResponseEntity<Any>("ok",HttpStatus.OK)
  }

de tal manera que 'Option1And2' es objeto genérico puede ser option1 o opción2.

Traté de sustituir 'Option1And2' a 'Any' pero no salió bien porque consigo una lista de claves y valores

Tal Shani:

Debe utilizar JsonNode objeto.

por su ejemplo que debe hacer esto:

 @Controller
 public class Controller{

 @RequestMapping(value = "service/getData", method = RequestMethod.POST)
 @ResponseBody
 public ResponseEntity<Any> getData(@RequestBody JsonNode jsonNode){

   ObjectMapper obj = new ObjectMapper();

  if(jsonNode.has("name"){
   Option1 result= obj.convertValue(jsonNode,Option1.class)
  return ResponseEntity<Any>(result.name,HttpStatus.OK)
    }    

   else {

   Option2 result= obj.convertValue(jsonNode,Option2.class)
   return ResponseEntity<Any>(result.id,HttpStatus.OK)
    }

    return ResponseEntity<Any>("ok",HttpStatus.OK)
     }

la JsonNode y la ObjectMapper debe importar desde aquí:

import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.JsonNode;

Este enlace le ayudará a entender mejor el JsonNode y le dará más detalles.

y este vínculo se debe ayudar con la convertValue de JsonNode a objetos Java (POJO).

Supongo que te gusta

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