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 vonBinderResponse
genanntvalid
istnull
. Was ist das Feld? - Sir, es ist kein Feld wie
valid
in meinemBinderResponse
. Ich habe nur Adresse detail und es istgetter / 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. HierBinderView is for Backend data fetching and processing
, undBinderResponse
ist, um Daten zu sendenview 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
undBaseView
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
beiWebApiResponseBase.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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Jackson, standardmäßig wird ein Objekt serialisiert, die ganze Hierarchie-Vererbung, dh. die übergeordnete Klasse von Feldern. Im Fall von
wie es scheint,
Jackson versucht zu serialisieren ein Feld namens
valid
aus einergetter
genanntisValid
(das ist eine konventionelle bean-Eigenschaft name). Die get-Methode, jedoch, scheint zu werfenNullPointerException
aus welchem Grund auch immer.Wenn Sie möchten, Jackson, es zu ignorieren, können Sie mit dem getter mit
@JsonIgnore
oder Ihre Klasse mit@JsonIgnoreProperties
und geben Sie den Namen der Eigenschaft, dh.valid
.In meinem Fall, wenn ich
@JsonIgnore
die Ausnahme wurde gegangen, aber das problem war, es konnte nicht bekommen, den Wert vonAPI Request
mehr und die Feder ignoriert es (offensichtlich wegen@JsonIgnore
), So untersuchte ich, über das Thema und herausgefunden, dass das problem war diegetter
undsetter
.Ich hatte die
Integer
Eigentum, während meinegetter
warint
. Also, wenn ich änderte diegetter
zuInteger
mein problem gelöst und der Fehler ist Weg.Geändert :
Wirft es die gleiche Ausnahme, weil hier null sein darf, durch den Aufruf getCreatedDate () - Wert kommen, so kann es nicht formatieren, null-Datum-so halten Sie null prüfen Sie hier, wie:
Lösung