Questo comportamento è piuttosto fastidioso poiché le stringhe JSON vengono accettate senza problemi se utilizzate come stringhe letterali nei comandi SQL.
C'è già un problema per questo nel repository Github del driver postgres (anche se il problema sembra essere l'elaborazione lato server).
Oltre a utilizzare un cast (vedi risposta di@a_horse_with_no_name) nella stringa sql, l'autore del problema offre due soluzioni aggiuntive:
- Utilizza un parametro
stringtype=unspecified
nell'URL/opzioni di connessione JDBC.
Questo dice a PostgreSQL che tutti i parametri text o varchar sono in realtà di tipo sconosciuto, permettendogli di dedurre i loro tipi più liberamente.
- Raccogli il parametro in un
org.postgresql.util.PGobject
:
PGobject jsonObject = new PGobject();
jsonObject.setType("json");
jsonObject.setValue(yourJsonString);
pstmt.setObject(11, jsonObject);