To zachowanie jest dość irytujące, ponieważ ciągi JSON są akceptowane bez problemów, gdy są używane jako dosłowne ciągi w poleceniach SQL.
Istnieje już problem z tym problemem w repozytorium Github sterownika postgres (nawet jeśli wydaje się, że problemem jest przetwarzanie po stronie serwera).
Oprócz użycia rzutowania (patrz odpowiedź@a_koń_bez_imienia) w ciągu sql, autor wydania oferuje dwa dodatkowe rozwiązania:
- Użyj parametru
stringtype=unspecified
w adresie URL/opcjach połączenia JDBC.
To mówi PostgreSQL, że wszystkie parametry tekstowe lub varchar są faktycznie nieznanego typu, co pozwala mu swobodniej wywnioskować ich typy.
- Opakuj parametr w
org.postgresql.util.PGobject
:
PGobject jsonObject = new PGobject();
jsonObject.setType("json");
jsonObject.setValue(yourJsonString);
pstmt.setObject(11, jsonObject);