Immer JsonMappingException beim senden von Daten zum anzeigen

Ich versuche zu zeigen, DB-Daten auf meiner Webseite.
Ich haben folgenden code als GET-request an den @RequestMapping(value = "/api/binder").

aber wenn die get-Anfrage kam diese Methode holt die Daten (ich habe das drucken auf der Konsole und display), aber es spielt keine Karte zu meiner Java Script Ajax-Aufruf, es zeigt mir einen Fehler an.

Folgendes ist mein code für die Daten abrufen :

    @Autowired
    IBinderViewRepository repository;

    @RequestMapping(method= RequestMethod.GET)
    public @ResponseBody
    List<BinderResponse> getBinders(){
        List<BinderView> binders = repository.getBinders();
        List<BinderResponse> responses = new ArrayList<>();
        ModelMapper mapper = Mapper.getInstance();

        for(int i = 0; i < binders.size(); i++){
            System.out.println("In Loop");
            BinderResponse response = mapper.map(binders.get(i),BinderResponse.class);
            System.out.println("Data :: " + response.getBinderName());
            responses.add(response);
        }
        return responses;
    }

aber es zeigt mir folgenden Fehler :

HTTP Status 500 - Could not write JSON: (was java.lang.NullPointerException) (through reference chain: java.util.ArrayList[0]->com.ngl.dto.outgoing.BinderResponse["valid"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException) (through reference chain: java.util.ArrayList[0]->com.ngl.dto.outgoing.BinderResponse["valid"])

Hier ist ajax-Aufruf von knockout js :

ajax.get('api/binder').done(function(response){ ... }

Hier BinderView and BinderResponse haben die gleichen Felder :

    private String binderName;
    private String binderAddress1;

setter-und getter-als auch in beiden.
und repository.genBinders() Methode Daten aus DB.

Hier ist der insert-Methode und funktioniert gut für mich :

    @RequestMapping(method= RequestMethod.POST,consumes = "application/json")
    public @ResponseBody
    IWebApiResponse addBinder(@RequestBody AddBinderForm binder){
        .....
    }

Soll ich haben, um alle json annotation on my BinderResponse class ?

Ich verstehe nicht, wo bin ich falsch ?Jemanden bitten, der mich anleitet.

UPDATE :

public class BinderResponse extends WebApiResponseBase {
    private String binderName;
    private String binderAddress1;

public String getBinderName() {
        return binderName;
    }

    public void setBinderName(String binderName) {
        this.binderName = binderName;
    }

    public String getBinderAddress1() {
        return binderAddress1;
    }

    public void setBinderAddress1(String binderAddress1) {
        this.binderAddress1 = binderAddress1;
    }
}

BinderView :

    public class BinderView extends BaseView {
        private String binderName;
        private String binderAddress1;
    public String getBinderName() {
            return binderName;
        }

        public void setBinderName(String binderName) {
            this.binderName = binderName;
        }

        public String getBinderAddress1() {
            return binderAddress1;
        }

        public void setBinderAddress1(String binderAddress1) {
            this.binderAddress1 = binderAddress1;
        }

}

In der Konsole es druckt Daten /BinderName :

In Loop
Data :: ada
In Loop
Data :: tya

Neues Update :

Hier ist BaseView :

@MappedSuperclass
public abstract class BaseView implements IEntity {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue
    @Column(name="id")
    private long id;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        if (this.id != 0 && this.id != id) {
            throw new IllegalStateException(
                    "The ID must not be changed after it is set.");
        }
        this.id = id;
    }
}

und In IEntity :

public interface IEntity  extends Serializable {
    long getId();
    void setId(long id);
}

WebApiResponseBase :

public class WebApiResponseBase implements IWebApiResponse {

    private String _uri;

    @Override
    public String getUri() {
        return _uri == null ? "" : _uri;
    }

    @Override
    public void setUri(String uri) {
        _uri = uri;
    }
}
  • Werfen Sie einen Blick in das, was Ihr responses enthält. Wie es scheint, Sie haben ein Feld von BinderResponse genannt valid ist null. Was ist das Feld?
  • Sir, es ist kein Feld wie valid in meinem BinderResponse. Ich habe nur Adresse detail und es ist getter / setter.
  • sir, wenn ich fahre NULL von der Methode, dann es zeigt keinen Fehler, ich denke, es ist das problem der Parsen, oder sonst ? sagen Sie mir, bin ich im Recht, oder ???
  • Im Idealfall sollten Sie uns ein Beispiel geben BinderResponse (die Klasse auch) mit den Werten können wir testen, um das problem zu reproduzieren.
  • Sir, ich habe aktualisiert, Frage, finden Sie unter UPDATE tag. Hier BinderView is for Backend data fetching and processing, und BinderResponse ist, um Daten zu senden view or user, anzeigen direkt nie auf den Benutzer.
  • Ok, brauchen mehr details. Für den Anfang, poste den vollständigen stack-trace. Dann, würde ich mag, um zu sehen, was WebApiResponseBase und BaseView sind.
  • Sir, ich habe versucht einen trick und das funktioniert, ich habe wieder die List<BinderView> object binder dann es funktioniert und zeigt die Daten als gut, aber hier situation ist, dass wir nicht mehr zurück können, ich habe auf die obligatorische Antwort zurück. Nun jeder Vorschlag, sir ?
  • Sir ich habe aktualisiert mit New Update tag.
  • Sie haben eine NullPointerException bei WebApiResponseBase.isValid. Haben Sie das untersucht?
  • Ja, und mehr als das, es ist eine gültige bean-Eigenschaft den Namen, so Jackson wird versuchen, erstellen Sie eine JSON-Feld für Sie. Das ist, was scheint die Ursache der NPE.
  • Ok, lassen Sie mich versuchen. und erhalten Sie zurück.
  • Ich habe Sir entfernen, erweitern WebApiResponseBase von BinderResponse und jetzt funktioniert es. aber ich kann das nicht tun, kann es möglich sein, um auszuschließen, dass die Methode während der Rückkehr das ? da diese Methode verwendet wird, auf alle, wo ich bin, abrufen von Daten, also kann ich nicht entfernen, die Methode von WebApiResponseBase class.
  • Blick in die @JsonIgnoreProperties annotation.
  • was für ein Zufall, sir,ich habe @JsonIgnore auf isValid-Methode und funktioniert gut. Sir, der tag wird nicht jedes problem in meinem anderen code ?? oder es tun können, etwas problematisch.
  • Nein, das Kommentar wird einfach verwendet von Jackson, welche Feder benutzt mit @ResponseBody.
  • Ok vielen Dank für die Unterstützung, sir. Ich habe mein problem gelöst, nur weil von Ihnen. Nochmals vielen Dank Mann. Wenn Sie wollen, dann kann post beantworten..
  • Ich hatte den umgekehrten Fall, wo meine variable wurde definiert als 'Double' und die Getter und setter wurden 'doppelt'. Ändern der Variablen von 'Double' in 'double' für mich gearbeitet.

Schreibe einen Kommentar