この動作は、SQLコマンドでリテラル文字列として使用するとJSON文字列が問題なく受け入れられるため、非常に煩わしいものです。
postgresドライバーのGithubリポジトリには、これに関する問題がすでにあります(問題がサーバー側の処理にあると思われる場合でも)。
SQL文字列でキャスト(@ a_horse_with_no_nameの回答を参照)を使用することに加えて、問題の作成者は2つの追加の解決策を提供します。
- パラメータを使用する
stringtype=unspecified
JDBC接続のURL/オプション。
これにより、すべてのテキストまたはvarcharパラメータが実際には不明なタイプであることがPostgreSQLに通知され、それらのタイプをより自由に推測できるようになります。
- パラメータを
org.postgresql.util.PGobject
でラップします :
PGobject jsonObject = new PGobject();
jsonObject.setType("json");
jsonObject.setValue(yourJsonString);
pstmt.setObject(11, jsonObject);