Restituire JSONObject da servlet

di il
6 risposte

Restituire JSONObject da servlet

Ciao a tutti.

Sto facendo delle prove con i json . in questo pezzo di codice invio praticamente dei dati da un form e me li faccio restituire.
Molto semplice.

protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
               
        response.setContentType("application/json");

        BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream()));
        String json = "";
        if(br != null){
            json = br.readLine();
        }
        
        PrintWriter out = response.getWriter();
        
        out.write(json);
        out.flush();
    }
Il problema è che se cerco di restituire un file di tipo JSONObject con lo stesso metodo mi da errore server 500.
protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        
        
         
        response.setContentType("application/json");

        BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream()));

        JSONObject json = new JSONObject();
        
        json.put("name", "federico");
        
        PrintWriter out = response.getWriter();
        
        out.print(json);
        out.flush();
    }
mi da errore , e non riesco a capire cosa sbaglio .

6 Risposte

  • Re: Restituire JSONObject da servlet

    JSONObject non è del framework standard ... quali API hai usato? A "naso" direi la json-simple (che è comunque una API JSON non recente e comunque davvero minimale).

    E comunque quale "errore" dà? Almeno precisa ...
  • Re: Restituire JSONObject da servlet

    Failed to load resource: the server responded with a status of 500 (Internal Server Error) (17:33:34:492 | error, network)at http://localhost:8080/ProgettoProsa/ValidServle>
  • Re: Restituire JSONObject da servlet

    jinkuriken94 ha scritto:


    Failed to load resource: the server responded with a status of 500 (Internal Server Error) (17:33:34:492 | error, network)at http://localhost:8080/ProgettoProsa/ValidServle>
    Come è mappata la servlet? Come la invochi? (essendo un POST, lo puoi fare in una pagina web solo con un form in POST oppure con un qualunque tool per fare request HTTP arbitrarie)
  • Re: Restituire JSONObject da servlet

    $.ajax({
                        url: "ValidServlet",
                        type: 'POST',
                        data : JSON.stringify(submitFormData),
                        success: function (data) {
                            alert(data.name);
                        },
                        error: function (data) {
                            alert('error');
                        }
                    });
    la invoco così .
    Il punto è che se non restituisco il json creato all'interno della mia servlet funziona.....
  • Re: Restituire JSONObject da servlet

    Adesso sto provando a fare così ma mi da lo stesso errore .....
    Invece se li passo un altro tipo di oggetto funziona ... non ci sto capendo più niente.
    $.ajax({
            url: "getFirstNode",
            type: 'POST',
            dataType: 'json',
            success: function (data) {
                alert('success');
            },
            error: function (data) {
                alert('error');
            }
        });
    @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            String id = "node1";
            String title = "Risoluzioni problemi nodo 1";
            ArrayList<String> question = new ArrayList();
            question.add("possibile problema 1");
            question.add("possibile problema 2");
            question.add("possibile problema 3");
            ArrayList<String> value = new ArrayList();
            value.add("node2");
            value.add("node3");
            value.add("node4");
            Node node = new Node(id,title,question,value);
            
            Gson g = new Gson();
            String jsonResult = g.toJson(id);
    
            try (PrintWriter writer = response.getWriter()) {
                writer.print(jsonResult);
                writer.flush();
                writer.close();
            }
        }
    
    la classe node è questa :
    public class Node {
        private String id;
        private String title;
        private ArrayList<Radio> radioList;
        
        public Node (){
            id = "";
            title = "";
            radioList = null;
        }
        
        public Node (String id, String title, ArrayList question, ArrayList radioValue){
            this.id = id;
            this.title = title;
            int i = 0;
            while (question.get(i) != null){
                String  q = (String) question.get(i);
                String v = (String) radioValue.get(i);
                Radio radio = new Radio(q,v);
                radioList.add(radio);
                i++;
            }
        }
        
        public String getId(){
            return id;
        }
        
        public String getTitle(){
            return title;
        }
        
        public ArrayList<Radio> getRadioList(){
            return radioList;
        }
        
        public void setID (String id){
            this.id = id;
        }
        
        public void setTitle (String title){
            this.title = title;
        }
        
        public void setRadioList (ArrayList radioList){
            this.radioList = radioList;
        }
        
        
    }
    e la radio è :
    public class Radio {
        private String text;
        private String value;
        
        public Radio() {
            text = "";
            value = "";
        }
        
        public Radio (String text, String value){
            this.text = text;
            this.value = value;
        }
        
        public String getText (){
            return text;
        }
        
        public String getValue (){
            return value;
        }
        
        public void setText (String text){
            this.text = text;
        }
        
        public void setValue (String value){
            this.value = value;
        }
    }
  • Re: Restituire JSONObject da servlet

    jinkuriken94 ha scritto:


    Invece se li passo un altro tipo di oggetto funziona ... non ci sto capendo più niente.
    La prima cosa più evidente (e che non c'entra nulla con JSON e la Gson) è che hai invocato l'altro costruttore di Node

    Node node = new Node(id,title,question,value);

    ma in questo costruttore fai un

    radioList.add(radio);

    dove radioList è sicuramente null (perché non vedo una istanziazione del ArrayList da nessuna parte).

    Quindi: hai sicuramente un NullPointerException. Ti bastava guardare il log di Tomcat (in Eclipse) per vedere lo stacktrace o fare del debugging per scoprirlo.


    P.S. Hai usato le collezioni un po' parametrizzate (es. ArrayList<Radio>) un po' non parametrizzate (solo ArrayList). Se sfrutti i generics, usali in modo consistente.
Devi accedere o registrarti per scrivere nel forum
6 risposte