2017-10-18 12 views
0

私はGrailsの3と春のセキュリティレストプラグインを使用してREST APIを作成しています。
私は私のバックエンドとしてMySQLのを使用しています。
しかし、/ api/loginエンドポイントにリクエストを送信しようとすると、常に401エラーが表示されます。
したがって、私は自分のドメインクラスのブールプロパティは、MySQLデータベースに正しくマップされていないことを想定しています。したがって、Spring Securityは401エラーを投げています。要するに
は、私がカスタムダイアレクトを作成してGrails 3のapplication.ymlファイルに追加する方法は?

package com.yourcompany.yourapp 

import java.sql.Types 
import org.hibernate.dialect.MySQL5InnoDBDialect 

class MyDialect extends MySQL5InnoDBDialect { 
    public MyDialect() { 
     registerColumnType(Types.BIT, "boolean") 
    } 
} 

カスタム方言を作成したいしかし、私はそれを行う方法へと混乱しています。新しいJavaファイルまたはGroovyファイルを作成する必要がありますか?また、私のgrails appディレクトリ内のどのディレクトリにカスタムの方言を作成する必要がありますか?

また、私のカスタム方言を使用するために、私は自分の変更した方言を使用するように私の変更の内容を理解する必要があります。application.ymlファイル

どのようなヘルプも高く評価されます。ありがとうございました!

答えて

0
package my.package 

import org.hibernate.dialect.MySQL5InnoDBDialect 

class ImprovedMySQLDialect extends MySQL5InnoDBDialect { 
    @Override 
    public String getDropSequenceString(String sequenceName) { 
     // Adding the "if exists" clause to avoid warnings 
     return "drop sequence if exists " + sequenceName; 
    } 

    @Override 
    public boolean dropConstraints() { 
     // We don't need to drop constraints before dropping tables, that just leads to error 
     // messages about missing tables when we don't have a schema in the database 
     return false; 
    } 
} 

とあなたのapplication.ymlで

dataSources: 
    dataSource: 
     #logSql: true 
     #formatSql: true 
     pooled: true 
     jmxExport: true 
     driverClassName: com.mysql.jdbc.Driver 
     #dialect: org.hibernate.dialect.MySQL5InnoDBDialect 
     dialect: my.package.ImprovedMySQLDialect 

通常は、Grailsの2にsrc/main/groovy/my/package/ImprovedMySQLDialect.groovyの内側にあなたのimprovedDialectファイルを配置します、それはsrc/mainsrc/groovy

で同様の経路であるあなたは、ドメインクラスを置きますか、データベースモデルとなるオブジェクト - > grails-app/domain

すべてのヘルパークラスgoe s内のsrc/main(java groovy)

あなたはこれらのボックスの中で0101のごみを意味しますか?私はそれがBoolean

として、またByteまたはbyte

byte privacy 
boolean main=false 

    static mapping = { 
     cache true 
     privacy(sqlType: 'tinyint(2)') 
     main(sqlType: 'bit(1)' 
    } 
としてあなたブールを宣言することをあなたを与えるだろう、あなたのX/Yを与えるために起こっていると思うか、チェックボックスまたは0/1の数値はありません

あなたが実際に...

バイトまたはブール値をやろうとしているものにはいくつかの選択肢がnullまたは偽または真の3つの状態にすることができ、あなたはブール宣言がオンまたはオフであるこれら3通りの方法でそれを扱うことができますです。

+0

ヘルプを評価してください。ファイルの作成場所を教えてください。私のappディレクトリ内のどのディレクトリですか? –

+0

まだ動作しません。 GrailsのbooleanをMySQLのTINYINTとしてマップしたい。しかし、上記のスクリプトを実行してMySQLのコマンドラインで表示した後も、ブール値の列の下にはガベージとして表示されます。 –

+0

私は、プロパティをバイトまたはビットとして宣言しても構いません。しかし問題は、これらのスクリプトがSpring Securityプラグインによって生成されることです。 API呼び出し中にシステムが有効な列の値を正しく読み取れない場合、問題は持続する可能性があります。 –

関連する問題