2017-10-18 1 views
0

Ich erstelle eine REST API mit Grails 3 und Spring Security Rest Plugin.
Ich verwende MySQL als mein Backend.
Aber ich bekomme immer einen 401 Fehler, wenn ich versuche, eine Anfrage an den Endpunkt/api/login zu senden.
Daher nehme ich an, dass boolesche Eigenschaften meiner Domain-Klasse in der MySQL-Datenbank nicht richtig zugeordnet werden. Daher wirft Spring Security 401 Fehler.
Kurz gesagt, möchte ich folgende benutzerdefinierten Dialekt erstellenWie erstelle ich einen benutzerdefinierten Dialekt und füge ihn zur Datei application.yml in Grails 3 hinzu?

package com.yourcompany.yourapp 

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

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

Aber ich bin verwirrt, wie es zu tun. Soll ich eine neue Java-Datei oder eine Groovy-Datei erstellen? Auch in welchem ​​Verzeichnis in meinem Grails-App-Verzeichnis soll ich meinen eigenen Dialekt erstellen?

Auch ich muss wissen, welche Änderungen ich in meiner application.yml Datei vornehmen sollte, um meinen benutzerdefinierten Dialekt zu verwenden.

Jede Art von Hilfe wird sehr geschätzt. Vielen Dank!

Antwort

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; 
    } 
} 

und in Ihrem 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 

Sie platzieren Ihre improvedDialect Datei in src/main/groovy/my/package/ImprovedMySQLDialect.groovy in Grails 2 es in der Regel ein ähnlicher Weg ist der src/main ist src/groovy

Sie Domain-Klassen setzen oder Objekte, die zu deinem Datenbankmodell werden -> grails-app/domain

Alle deine Helferklassen goe s innerhalb src/main (java groovy)

Sie meinen Müll mit 0101 in diesen Kisten? Ich glaube nicht, dass Sie geben wird X/Y oder ein Kontrollkästchen oder einen numerischen Wert von 0/1 es euch geben wird, dass als Boolean

Alternativ Ihre Boolesche als Byte oder byte

byte privacy 
boolean main=false 

    static mapping = { 
     cache true 
     privacy(sqlType: 'tinyint(2)') 
     main(sqlType: 'bit(1)' 
    } 
erklären

sind einige Alternativen zu dem, was Sie versuchen, ... in der Tat

Bytes oder boolesche Werte tun können 3 Zustände null oder falsch oder wahr sein, und Sie können es in diesen drei Möglichkeiten behandeln boolean Erklärung ein- oder ausgeschaltet ist.

+0

Schätzen Sie die Hilfe. Kannst du mir auch bei der Erstellung der Datei helfen? In welchem ​​Verzeichnis in meinem App-Verzeichnis? –

+0

Funktioniert immer noch nicht. Ich möchte, dass Boolean in Grails als TINYINT in MySQL abgebildet wird. Aber nach dem Ausführen des obigen Skripts und Anzeigen in der MySQL-Befehlszeile wird es immer noch als Müll unter der booleschen Spalte angezeigt. –

+0

Die Sache ist, ich habe nichts dagegen, meine Eigenschaft als Byte oder Bit zu deklarieren. Das Problem ist jedoch, dass diese Skripte von einem Spring Security-Plugin generiert werden. Wenn das System den aktivierten Spaltenwert während des API-Aufrufs nicht richtig lesen kann, kann das Problem bestehen bleiben. –

Verwandte Themen