Autor
|
Tema: peticion http desde spring (Leído 4,848 veces)
|
ryhuso
Desconectado
Mensajes: 25
|
hola , no se si alguien me puede ayudar, quiero enviar una peticion http desde mi apirest para dar de alta un dispositivo en otro servicio. @PostMapping("/dispositivos") @ResponseStatus(code = HttpStatus.CREATED) public ResponseEntity<?> crear(@Valid @RequestBody Dispositivo dispositivo, BindingResult result) throws Exception { Dispositivo dispositivonew = null; Map<String, Object> response = new HashMap<>(); if (result.hasErrors()) { List<String> errors = result.getFieldErrors().stream() .map(err -> "El campo '" + err.getField() + "' " + err.getDefaultMessage()) .collect(Collectors.toList()); response.put("errors", errors); return new ResponseEntity<Map<String, Object>>(response, HttpStatus.BAD_REQUEST); }
try { peticionHttpPut(dispositivo); dispositivonew = dispositivoService.save(dispositivo); } catch (DataAccessException e) { response.put("mensaje", "Error realizar al insertar en la base de datos!"); response.put("error", e.getMessage().concat(": ").concat(e.getMostSpecificCause().getMessage())); return new ResponseEntity<Map<String, Object>>(response, HttpStatus.INTERNAL_SERVER_ERROR);
}
response.put("mensaje", "El Dispositivo ha sido creado con éxito!"); response.put("dispositivo", dispositivonew); return new ResponseEntity<Map<String, Object>>(response, HttpStatus.CREATED);
}
public void peticionHttpPut(Dispositivo dispositivo) throws Exception {
URL url = new URL("https://hu3-gp9yw4dci7.azureiotcentral.com/api/preview/devices/" + dispositivo.getIdentificadorDispositivo());
HttpURLConnection conexion = (HttpURLConnection) url.openConnection(); conexion.setRequestMethod("PUT"); conexion.setDoOutput(true); conexion.addRequestProperty("Authorization", "SharedAccessSignature sr=a8b19977-9c37-4e01-bc86-f5990544bcb8&sig=gaSLKfM9MUo6Fsx9XVjY%3D&skn=admin&se=1650104456226"); conexion.setRequestProperty("Content-Type", "application/json");
String nombre = dispositivo.getNombre(); String instanceOf = "dtmi:modelDefinition:a2zj2t:b6dfy";
Map<String, Object> map = new HashMap<>(); map.put("displayName", nombre); map.put("instanceOf", instanceOf); map.put("simulated", false); map.put("approved", true); JSONObject json = new JSONObject(map);
String jsonInputString = json.toString();
try (OutputStream os = conexion.getOutputStream()) { byte[] input = jsonInputString.getBytes("utf-8"); os.write(input, 0, input.length); } }
lo que quiero hacer es que cuando entre a mi solicitud de de alta en mi base de datos y también haga la petición put que tengo en el método, pero solo me inserta en la base de datos y no me hace lo otro.
|
|
|
En línea
|
|
|
|
rub'n
Desconectado
Mensajes: 1.217
(e -> λ("live now")); tatuar -> λ("α");
|
Pienso que lo mejor seria que crearas otro metodo con la anotacion @PutMapping, logrando que tengas cada metodo para una unica operacion (PUT, POST, GET...
Aqui usas un POST para hacer un save a la misma vez que quieres tambien actualizar un item.
|
|
« Última modificación: 19 Abril 2021, 12:53 pm por rub'n »
|
En línea
|
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen king
|
|
|
ryhuso
Desconectado
Mensajes: 25
|
Ese no es el error por que quiero que realice un post en mi apirest y un put en la petición http que es para crear una plantilla en una aplicación de microsoft.
|
|
|
En línea
|
|
|
|
ryhuso
Desconectado
Mensajes: 25
|
Pienso que lo mejor seria que crearas otro metodo con la anotacion @PutMapping, logrando que tengas cada metodo para una unica operacion (PUT, POST, GET...
Aqui usas un POST para hacer un save a la misma vez que quieres tambien actualizar un item.
lo que pasa es que si ejecuto post me pone un id aleatorio por eso uso el put para poner el que yo quiero
|
|
|
En línea
|
|
|
|
rub'n
Desconectado
Mensajes: 1.217
(e -> λ("live now")); tatuar -> λ("α");
|
Ese no es el error por que quiero que realice un post en mi apirest y un put en la petición http que es para crear una plantilla en una aplicación de microsoft.
Entiendo que el save lo esta haciendo bien... o no? manda el log que arroja este metodo peticionHttpPut()
|
|
|
En línea
|
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen king
|
|
|
ryhuso
Desconectado
Mensajes: 25
|
Entiendo que el save lo esta haciendo bien... o no?
manda el log que arroja este metodo peticionHttpPut()
no arroja ningún error, pero se que no se ejecuta por que en la pagina web donde tiene que aparecer el dispositivo creado no existe. Probando el método solo si me crea lo que quiero pero al ejecutarlo desde el controller creo que viene el problema, no se si tengo que configurar algo o mandar la petición de otro modo.
|
|
|
En línea
|
|
|
|
ryhuso
Desconectado
Mensajes: 25
|
no arroja ningún error, pero se que no se ejecuta por que en la pagina web donde tiene que aparecer el dispositivo creado no existe. Probando el método solo si me crea lo que quiero pero al ejecutarlo desde el controller creo que viene el problema, no se si tengo que configurar algo o mandar la petición de otro modo.
el save si lo ejecuta bien
|
|
|
En línea
|
|
|
|
rub'n
Desconectado
Mensajes: 1.217
(e -> λ("live now")); tatuar -> λ("α");
|
Doc, create otro método con la anotación @PutMapping para exponer tu endpoint de manera sincrona con RestTemplate, ella actua en otra capa de abstracción sin tocar el low level api con HttpURLConnection a mano...
Para consumirla usa un cliente estilo HttpClient de Java 11 que es ahora nativo, OKHttpClient, retrofit etc. y te ahorras mas dolor de cabeza, mas facil de depurar etc.
Y por favor, intentemos ser mas explícitos a la hora de notificar un potencial problema con nuestro codigo.
Usar siempre código geshi, log de errores, y en lo posible un minimo test de reproduccion del error.
|
|
« Última modificación: 19 Abril 2021, 13:32 pm por rub'n »
|
En línea
|
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen king
|
|
|
ryhuso
Desconectado
Mensajes: 25
|
dog, create otro metodo con la anotacion @PutMapping para exponer tu endpoint de manera sincrona con RestTemplate, ella actua en otra capa de abstraccion sin tocar el low level api con HttpURLConnection a mano...
Para consumirla usa un cliente estilo HttpClient de Java 11 que es ahora nativo, OKHttpClient, retrofit etc. y te ahorras mas dolor de cabeza, mas facil de depurar etc.
OK lo intentare cualquier cosa la comento. gracias.
|
|
|
En línea
|
|
|
|
ryhuso
Desconectado
Mensajes: 25
|
Lo solucione usando un HttpRequest en lugar de HttpURl conection
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Como enviar una peticion HTTP desde winsock
Programación Visual Basic
|
illuminat3d
|
1
|
2,598
|
5 Enero 2009, 01:07 am
por Karcrack
|
|
|
Peticion HTTP por proxy
Hacking
|
TomaSs
|
2
|
4,955
|
23 Junio 2011, 07:36 am
por TomaSs
|
|
|
Peticion HTTP desde servidor remoto
Programación General
|
TomaSs
|
0
|
3,124
|
7 Junio 2011, 03:51 am
por TomaSs
|
|
|
Mi clase HTTP + winsock peticion HTTP ejemplo
Programación C/C++
|
patilanz
|
3
|
3,038
|
28 Diciembre 2014, 00:30 am
por ivancea96
|
|
|
Convertir una peticion api https a http
Scripting
|
FRAN2016
|
0
|
2,087
|
29 Agosto 2017, 12:05 pm
por FRAN2016
|
|