Soy un principiante en el desarrollo de Java pero tengo experiencia previa en lenguajes de programación como PHP y Python. Tan poco confundido sobre cómo proceder en el arranque de primavera con el desarrollo.
Estoy desarrollando una API de descanso que tiene la siguiente solicitud
{ "key":"value", "key1":"value1", "platform_settings":[ {"key":"value"} ] }Lo que hice
Creé un RestController que acepta la solicitud http y creé una función para el recurso
public Share share(@RequestBody final Share share) { LOGGER.debug("This is the request", share); return share; // }Pregunta 1: si se tratara de cualquier otro lenguaje de programación como PHP o Python, habrá una función de ayuda que aceptará la solicitud json y la convertirá en un objeto en el que puedo trabajar fácilmente.
En python es tan simple como
import json import requests response = requests.get(...) json_data = json.loads(response.text) //can work on json_data anyway I want.Pero en Java, tendré que crear una clase POJO, o tener una entidad jackson/JPA como dependencia que asignará la solicitud a una Clase (que debo predefinir con las solicitudes).
¿Hay alguna manera mejor de hacer esto? Para cada solicitud que haga, tendré que crear una clase a la que se pueda asignar la solicitud y tendré que definir la clase
Entity package com.payunow.socialsharemodule.models; import java.util.Map; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class Share { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String key; private String key1; private Map<String,String> platform_settings; public Share(String name, String description,Map<String,String> platform_settings) { this.key = key; this.key1 = key1; this.platform_settings = platform_settings; } //for JPA public Share() {} public String getKey() { return key; } public String getKey1() { return key1; } public Map<String,String> getPlatform_settings() { return platform_settings; } }Para cada solicitud que haga, tendré que crear una clase que defina todas sus variables dentro. ¿Es esta la única manera de hacer esto?
Debe tener la dependencia de Jackson para la conversión de json a objeto java. Pero Spring lo proporciona de forma predeterminada, por lo que no tiene que agregarlo explícitamente.
No necesita una entidad JPA. Esto es necesario solo cuando desea almacenar los datos recibidos en la base de datos.
Solo para recibir la solicitud, no tiene que crear una clase pojo separada. Mira este código
@PostMapping("/json") public JSONObject getGeneric(@RequestBody String stringToParse){ JSONParser parser = new JSONParser(); JSONObject json = null; try { json = (JSONObject) parser.parse(stringToParse); } catch (ParseException e) { e.printStackTrace(); } return json; }Como puede ver aquí, toma una cadena como una solicitud y la convierte en un JSONObject genérico. Entonces, básicamente, puede pasar cualquier json a este punto final.
Puede usar la clase ObjectMapper, tiene métodos como convertValue y realValue.