[JAVA] Was tun, wenn die Annotation JSON Hint nicht mit Lombok und JSONIC funktioniert?

Ein Hinweis zur Problemumgehung, da die Annotation `` `@ JSONHint``` bei Verwendung von JSONIC und lombok nicht gut funktioniert hat.

Version verwendet

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.20</version>
</dependency>

<dependency>
    <groupId>net.arnx</groupId>
    <artifactId>jsonic</artifactId>
    <version>1.3.10</version>
</dependency>

Symptome und Problemumgehungen

Angenommen, Sie möchten einen JSON, der eine Datumszeichenfolge im folgenden Format enthält, als Beispiel analysieren.

String json = "{dateTime: \"2018-03-29T11:22:33.123+09:00\"}";
SampleData s = JSON.decode(json, SampleData.class);

Eine Klasse, die Lombok verwendet, sieht so aus.

import java.time.LocalDateTime;

import lombok.Data;
import net.arnx.jsonic.JSONHint;

@Data
public class SampleData {
	@JSONHint(format="yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ")
	private LocalDateTime dateTime;
}

Dies ist eine Ausnahme, wie unten gezeigt, und es ist ersichtlich, dass die Annotation `` `@ JSONHint``` nicht aktiviert ist.

Exception in thread "main" net.arnx.jsonic.JSONException: {dateTime=2018-03-29T11:22:33.123+09:00}Ist Klasse asdf.asdfasd.Konnte nicht in SampleData konvertiert werden: $.dateTime
	at net.arnx.jsonic.JSON$Context.convertInternal(JSON.java:1775)
	at net.arnx.jsonic.JSON.parse(JSON.java:1155)
	at net.arnx.jsonic.JSON.parse(JSON.java:1130)
	at net.arnx.jsonic.JSON.decode(JSON.java:665)
	at asdf.asdfasd.App.main(App.java:15)
Caused by: java.time.format.DateTimeParseException: Text '2018-03-29T11:22:33.123+09:00' could not be parsed, unparsed text found at index 23
	at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1952)
	at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)

Die Ursache hierfür ist, dass https://ja.osdn.net/projects/jsonic/ticket/35184 angibt, dass JSONIC dieser Anmerkung Vorrang einräumt, wenn ein Getter / Setter vorhanden ist. lombok generiert automatisch Getter / Setter, aber da dort kein `` `@ JSONHint``` vorhanden ist, tritt diese Situation auf.

Um dieses Problem zu umgehen, habe ich mich entschlossen, Getter / Setter für die Zieleigenschaft selbst zu definieren.

@Data
public class SampleData {
	/*Getter für diese Eigenschaft/Da ein Setter nicht erforderlich ist, wird die automatische Erzeugung unterdrückt*/
	@Getter(AccessLevel.NONE)
	@Setter(AccessLevel.NONE)
	private LocalDateTime d;

	public LocalDateTime getDateTime() {
		return d;
	}

	@JSONHint(format="yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ")
	public void setDateTime(LocalDateTime dateTime) {
		this.d = dateTime;
	}
}

Recommended Posts

Was tun, wenn die Annotation JSON Hint nicht mit Lombok und JSONIC funktioniert?
Was tun, wenn die Annotation JSON Hint nicht mit Lombok und JSONIC funktioniert?
Verwenden Sie keine Floats und Doubles, um Geldbrüche zu berechnen
Was tun, wenn der Haltepunkt schattiert ist und beim Debuggen nicht stoppt?
Was tun, wenn die Validierung mit der Aktualisierungsaktion nicht funktioniert?
Was tun, wenn Sie Ruby mit rbenv installiert haben, die Version sich jedoch nicht ändert?
[Ubuntu 20.04] Was tun, wenn der externe Monitor nicht erkannt wird?
Was tun, wenn Sie in Eclipse eine JRE auswählen und "Die ausgewählte JRE unterstützt die aktuelle Konformitätsstufe 11 nicht" erhalten?
Was tun, wenn die App nicht mit der neuesten Rails-Version erstellt wurde, die bei neuen Rails installiert wurde?
Was tun, wenn das Hintergrundbild nach der Bereitstellung nicht angewendet wird?
Was tun, wenn das Präfix c in JSP nicht gebunden ist?
Was tun, wenn der Server-Tomcat stirbt?
Was tun, wenn die Änderungen nicht in der JAR-Manifestdatei berücksichtigt werden?
[Grails] Beim Ausführen ist ein Fehler aufgetreten. Was ist zu tun, wenn die Grails-CLI nicht gestartet wird?
Was zu tun ist, wenn es ungültig ist, weil es nicht mit einem '-' beginnt
Was tun, wenn die Installation des Debug-Gems fehlschlägt?
Was tun, wenn der Rails-Server nicht gestartet werden kann?
Was tun, wenn TextToSpeech unter Android 11 nicht funktioniert?
Was tun, wenn die Routing-Einstellungen nach dem Erstellen einer Docker-Umgebung mit Laravel nicht funktionieren?
Was tun, wenn Sie den Befehl "Java-Paketname / Klassenname" nicht ausführen können?
Was tun, wenn FacesMessage festgelegt, aber nicht angezeigt wird?
Was tun, wenn der Befehl adb nicht ausgeführt werden kann?
Was tun, wenn der Befehl Rails unbrauchbar wird?
Was tun, wenn Sie die Listen-Adresse im Einstellungsbildschirm des Dockers Mattermost ändern?
[Schienen] Was tun, wenn mit der Fehlermethode keine Fehlermeldung angezeigt wird?
Was tun, wenn "Relation" hibernate_sequence "nicht existiert" in der ID-Spalte von PostgreSQL + JPA
[Rails] Was tun, wenn keine Daten in der Datenbank registriert sind?
Was tun, wenn Intel RST (Rapid Storage Technology) den Dual-Boot von Ubuntu20.04LTS und Windows10 stört?
Was tun, wenn die Änderungen im Servlet nicht berücksichtigt werden?
Was tun, wenn die Rails-Seite im Rails-Lernprogramm 1.3.2 nicht angezeigt wird?
Was tun, wenn Cloud 9 im Rails-Lernprogramm voll ist?
Was tun, wenn Sie sich über OpenSSL mit pyenv install ärgern?
[Rails 5] [Turbolinks] Was tun, wenn JS aufgrund eines Seitenübergangs oder eines Browsers nicht funktioniert?
[Logback] Was tun, wenn unnötige Dateien während der Rotation nicht verschwinden?
Was tun, wenn Sie Ihr Root-Passwort unter CentOS7 vergessen haben?
[Rails] Was tun, wenn Sie mit form_with keine Parameter abrufen können?
Was tun, wenn der Vorgang nicht zulässig ist, wenn ein Befehl im Terminal ausgeführt wird?
Was tun, wenn in CircleCI der Fehler zu lang ohne Ausgabe (über 10 m0s) angezeigt wird?
Was tun, wenn JavaMail nicht mit OpenJDK 11 oder höher verwendet werden kann?
So interagieren Sie mit einem Server, der die App nicht zum Absturz bringt
[IOS] Was tun, wenn das Bild mit einer Farbe gefüllt ist?
Was tun, wenn die Änderungen nach der automatischen Bereitstellung in EC2 nicht übernommen werden?
Fügen Sie gem'rails-i18n ',' ~> 6.0.0 'hinzu und was zu tun ist, wenn die Bundle-Installation einen Fehler anzeigt
Was tun, wenn Sie das Plug-In nicht vom Eclipse Marketplace installieren können?
Was tun, wenn die Bereitstellung in Heroku fehlschlägt (Ruby-App nicht erkannt)?
Was tun, wenn der Build mit dem Fehler "Mit Swift x.x.x kompiliertes Modul kann vom Swift x.x.x-Compiler nicht importiert werden" fehlschlägt.
Was tun, wenn Sie aktiviert haben? Verwenden Sie die WSL2-basierte Engine in Docker Desktop mit unzureichender WSL2-Installation
Was tun, wenn Sie Gemfile oder .bundle / directory nicht finden konnten?
Was tun, wenn Sie das mit bootstrap-select erstellte Auswahlfeld nicht aktivieren können?
So funktioniert @Transactional, das nicht funktioniert, wenn Sie es falsch verwenden
Was tun, wenn Um die fehlende Version zu installieren, führen Sie `gem install bundler: 2.1.4` aus
Wenn die Tastenkombination Strg + in Eclipse nicht funktioniert, kann das Deaktivieren der Begrüßung hilfreich sein