2017-10-18 49 views
0

我正在使用Grails 3和Spring Security Rest插件创建REST API。
我正在使用MySQL作为我的后端。
但是,每当我尝试向/ api/login端点发送请求时,我总是会收到401错误。
因此,我假设我的Domain类的布尔属性没有在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应用程序目录中的哪个目录应该创建自定义方言?

另外我需要知道我应该在我的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 

通常,您可以将您的improvedDialect文件中src/main/groovy/my/package/ImprovedMySQLDialect.groovy Grails中2是一个类似的路径src/mainsrc/groovy

你把域类或对象成为你的数据库模型里面 - > grails-app/domain

所有的助手类goe s里面src/main(java groovy)

你的意思是垃圾箱里面有0101吗?我不认为这将会给你X/Y或A复选框或0/1的数值,它会给你,作为Boolean

或者宣告你的布尔作为Bytebyte

byte privacy 
boolean main=false 

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

是一些替代你正在试图做...

字节或布尔实际上可以3个状态空或虚假或真实,你可以在这3个方面布尔宣言是开启还是关闭对待它。

+0

欣赏帮助。你还可以帮我解决在哪里创建文件?我的应用程序目录中的哪个目录? –

+0

仍然无法正常工作。我想要在Grails中将布尔值映射为MySQL中的TINYINT。但是在运行上面的脚本并在MySQL命令行中查看之后,它仍然显示为布尔列下的垃圾。 –

+0

事情是我不介意将我的财产声明为字节或位。但问题是这些脚本是由Spring Security插件生成的。如果在API调用期间系统无法正确读取启用的列值,则问题可能会持续。 –

相关问题