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
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).