2017-10-18 11 views
0

Je crée une API REST en utilisant Grails 3 et le plugin Spring Security Rest.
J'utilise MySQL comme back end.
Mais je reçois toujours une erreur 401 chaque fois que j'essaie d'envoyer une requête au point de terminaison/api/login.
Par conséquent, je suppose que les propriétés booléennes de ma classe de domaine ne sont pas correctement mappées dans la base de données MySQL. Par conséquent, Spring Security lance l'erreur 401.
En bref, je veux créer les éléments suivants dialecte personnaliséComment créer un dialecte personnalisé et l'ajouter au fichier application.yml dans Grails 3?

package com.yourcompany.yourapp 

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

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

Mais je suis confus quant à la façon de le faire. Dois-je créer un nouveau fichier java ou un fichier Groovy? Dans quel répertoire de mon répertoire d'application Grails dois-je également créer mon dialecte personnalisé?

Aussi j'ai besoin de savoir quelles modifications dois-je faire dans mon application.yml fichier de façon à utiliser mon dialecte personnalisé.

Toute forme d'aide est fortement appréciée. Je vous remercie!

Répondre

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

et dans votre 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 

En général, vous placez votre fichier improvedDialect à l'intérieur src/main/groovy/my/package/ImprovedMySQLDialect.groovy dans Grails 2 est un chemin similaire, le src/main est src/groovy

Vous placez les classes de domaine ou objets qui deviennent votre modèle de base de données à l'intérieur -> grails-app/domain

Toutes vos classes d'assistance goe s src/main (java groovy)

Vous voulez dire des ordures avec 0101 à l'intérieur de ces boîtes? Je ne pense pas que cela va vous donner X/Y ou une case à cocher ou une valeur numérique de 0/1 il vous donnera que Boolean

déclarer Sinon votre Boolean comme Byte ou byte

byte privacy 
boolean main=false 

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

est des alternatives à ce que vous essayez de faire ...

Octets ou booléens en vigueur peut être 3 états nuls ou faux ou vrai et vous pouvez le traiter dans ces 3 façons déclaration booléenne est activée ou désactivée.

+0

Appréciez l'aide. Pouvez-vous aussi m'aider avec où créer le fichier? Dans quel répertoire dans le répertoire de mon application? –

+0

Ne fonctionne toujours pas. Je veux que Boolean dans Grails soit mappé comme TINYINT dans MySQL. Mais après l'exécution du script ci-dessus et l'affichage dans la ligne de commande MySQL, il apparaît toujours comme une poubelle sous la colonne booléenne. –

+0

La chose est que cela ne me dérange pas de déclarer ma propriété comme octet ou bit. Mais le problème est que ces scripts sont générés par un plugin Spring Security. Si pendant l'appel de l'API, le système ne peut pas lire correctement la valeur de la colonne activée, le problème peut persister. –