Problema Cast Json to Object

di il
3 risposte

Problema Cast Json to Object

Salve a tutti,

Ho il seguente problema:

Controller:


// http://localhost:8080/cgrapi/relUtenteAD/aggiornaList
	@RequestMapping(value = "/aggiornaList", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
	@ResponseBody
	public FilteredResponse aggiornaList(@ApiParam(required = true, examples = @io.swagger.annotations.Example(value = {
			@ExampleProperty(value = "it.lispa.CGR.API.api.requestobjects.utente.AggiornaListRelUtenteAD", mediaType = "application/json") })) @RequestBody String payload)
			throws Exception {

		try {
			AggiornaListRelUtenteADRequest request = new AggiornaListRelUtenteADRequest().fromJSON(payload);
			ListRelUtenteAD l = request.getL();
			
			logger.debug("type: " + l.getType() + ", idUtente: " + l.getIdUtente());

			relUtenteADService.aggiornaList(l);

			return FilteredResponse.serializeAll(new Response(Def.OK, ""));
		} catch (Exception e) {
			logger.error(e.getMessage());
			return FilteredResponse.serializeAll(new Res(Def.KO, e.getMessage()));
		}
	}

Servizio:

public void aggiornaList(ListRelUtenteAD l) throws Exception {
		logger.debug("type: " + l.getType() + ", idUtente: " + l.getIdUtente());
		impRelUtenteAdRepository.aggiornaAll(l.getListaRelUtenteAD(), l.getType(), l.getIdUtente());
	}


repository:

@Transactional
	public void aggiornaAll(Collection<RelUtenteAD> collDati, String type, String idUtente)	throws Exception {
		try {			
			//prima di inserire le nuove aree dati elimino sempre tutte quelle gia' associate
			deleteAllByUtente(idUtente);
			for (Iterator<RelUtenteAD> iterator = collDati.iterator(); iterator.hasNext();) {
				RelUtenteAD r = iterator.next();
				UtnRelUtenteAD relUtenteAD = new UtnRelUtenteAD();
				logger.debug("areadati: " + r.getIdAD() + ", SEL: " + r.getSel() + ", DEL: " + r.getDel() + ", UPD: " + r.getUpd() + ", INS: " + r.getIns());
				relUtenteAD.setIdAD(r.getIdAD());
				relUtenteAD.setIdUtente(idUtente);
				relUtenteAD.setSel(r.getSel());
				relUtenteAD.setIns(r.getIns());
				relUtenteAD.setUpd(r.getUpd());
				relUtenteAD.setDel(r.getDel());
				if (Def.TYPE_INSERT.equalsIgnoreCase(type)) {
					salva(relUtenteAD);
				} else if (Def.TYPE_UPDATE.equalsIgnoreCase(type)) {
					update(relUtenteAD);
				} else if (Def.TYPE_DELETE.equalsIgnoreCase(type)) {
					delete(relUtenteAD.getIdUtente(), r.getIdAD());
				}
			}
		} catch (Exception e) {
			logger.error(e.getMessage());
			throw e;
		}
	}
l'errore che mi da è il seguente:
org.json.simple.JSONObject cannot be cast to it.lispa.CGR.API.api.domain.areaUtenti.relUtenteAD.po.RelUtenteAD"

relUtenteADService.aggiornaList(l);

come posso risolvere?

3 Risposte

  • Re: Problema Cast Json to Object

    Prima questione: perché devi ricevere un String e fare tu il binding programmaticamente invece di farlo fare a Spring + es. la Jackson (o altra API JSON usabile con Spring)?

    Seconda questione: cosa fa esattamente quel fromJSON e come è fatto AggiornaListRelUtenteADRequest ?

    Ah, e come è fatto il JSON in ingresso?
  • Re: Problema Cast Json to Object

    Purtroppo il progetto è stato fatto in questo modo, la sua architettura è stata impostata con delle query native del vecchio progetto e trasformare in json passo dopo passo, senza utilizzare al100% spring boot jpa.
    Comunque ho risolto, per ogni cosa devo realizzare a mano il json, al vecchio stile.
  • Re: Problema Cast Json to Object

    imparareJava ha scritto:


    per ogni cosa devo realizzare a mano il json, al vecchio stile.
    E .... che vuol dire? Mica starai componendo stringhe "a mano" per fare il json (?)

    Comunque prima hai parlato del org.json.simple.JSONObject. Per cui stavi usando la JSON Simple. Non la conosco benissimo nei dettagli ma da quanto so è una librerie molto molto piccola (circa una dozzina di classi mi pare). E quindi NON è una libreria di "binding" completa come es. la Jackson o Gson. In sostanza se hai un json che rappresenta una persona, NON lo puoi "mappare" direttamente su una classe Persona. La JSON Simple ti fornisce solo oggetti tipo JSONObject, JSONArray (a "basso" livello) e sei tu che devi estrarre i dati e poi fare altro (es. creare un oggetto Persona).
    Il "limite" insomma è quello ....
Devi accedere o registrarti per scrivere nel forum
3 risposte