Dieses Verhalten ist ziemlich ärgerlich, da JSON-Strings problemlos akzeptiert werden, wenn sie als Literal-Strings in SQL-Befehlen verwendet werden.
Es gibt bereits ein Problem dafür im Postgres-Treiber-Github-Repository (auch wenn das Problem die serverseitige Verarbeitung zu sein scheint).
Neben der Verwendung eines Casts (siehe Antwort von @a_horse_with_no_name) im SQL-String bietet der Issue-Autor zwei weitere Lösungen an:
- Verwenden Sie einen Parameter
stringtype=unspecified
in der JDBC-Verbindungs-URL/Optionen.
Dies teilt PostgreSQL mit, dass alle Text- oder Varchar-Parameter tatsächlich von unbekanntem Typ sind, wodurch es ihre Typen freier ableiten kann.
- Wrappen Sie den Parameter in ein
org.postgresql.util.PGobject
:
PGobject jsonObject = new PGobject();
jsonObject.setType("json");
jsonObject.setValue(yourJsonString);
pstmt.setObject(11, jsonObject);