小编Ben*_*Ben的帖子

Golang - DTO,实体和制图

我是来自C#背景的Go的新手,我对如何构建Go应用程序感到很困惑.

假设我正在构建一个将位于数据库之上的REST API.还要说,即使在完成之后,由于业务的变迁等原因,这个应用程序可能需要经常更改.

在使用Entity Framework和DTO等工具的C#中,我通过从控制器给出的结果中抽象数据库来稍微缓解这个问题.如果我更改数据库中一堆字段的名称,我可能不得不更改我的数据库访问逻辑,但希望我使用AutoMapper映射到我的实体的DTO可以保持不变,所以我不会破坏依赖于它的前端功能给定的DTO结构.

我应该用Go的结构复制这个结构吗?关于这种方法的一些看起来似乎是错误的,因为结构基本上只是DTO,而且我将有相当多的DTO结构与实体结构相同.我还必须设置逻辑以将实体映射到DTO.这一切都只是在某种程度上感觉非常单一,我在网上看到的许多例子都是序列化数据库结构.

简而言之,人们如何避免他们的API与Go中的数据库之间的过度耦合?他们如何广泛地分离出应用程序的不同部分?

如果它有任何区别,我打算用来sqlx将数据库结果编组到结构体中,如果我不从DTO中分离实体,那么除了JSON之外,这将意味着更多标签.

c# go

13
推荐指数
2
解决办法
4964
查看次数

Golang 和果阿的 JWT 声明中不存在范围

我正在使用优秀的goa包在 Go 中生成我的 API。

但是,我的安全中间件存在问题,当我向控制器提交不记名令牌时,由于“scopes:null”,我收到“授权失败”。我使用 Auth0 进行身份验证,它正在生成不记名令牌。Postman 中的确切错误是:

{"id":"xOUR882s","code":"jwt_security_error","status":401,"detail":"authorization failed: required 'scopes' not present in JWT claim","meta":{"required":["read:meta"],"scopes":null}}
Run Code Online (Sandbox Code Playgroud)

但是,我的令牌确实包含所需的范围read:metajwt.io返回以下解码后的承载:

{
  "iss": "https://learnlogic.au.auth0.com/",
  "sub": "exJMkK7hXX56lrLwoTqna3s0jh7Gq67e@clients",
  "aud": "https://api.learn-logic.com",
  "exp": 1494855336,
  "iat": 1494768936,
  "scopes": "read:meta"
}
Run Code Online (Sandbox Code Playgroud)

middleware/jwt.go我希望有人可以帮助我解决原因,因为我真的不明白该项目中发生了什么goa,可以在这里找到。我唯一的想法是 Auth0 格式的承载的某些内容与parseClaimScopes中的功能不兼容middleware/jwt.go,但我不知道是什么。

我有以下main.go代码:

b, err := ioutil.ReadFile("util/jwt.key")
    if err != nil {
        return
    }

    block, _ := pem.Decode([]byte(b))
    var cert *x509.Certificate
    cert, _ = x509.ParseCertificate(block.Bytes)
    rsaPublicKey := cert.PublicKey.(*rsa.PublicKey)
    fmt.Println(rsaPublicKey.N)
    fmt.Println(rsaPublicKey.E) …
Run Code Online (Sandbox Code Playgroud)

go jwt auth0

5
推荐指数
1
解决办法
1090
查看次数

java.lang.NoClassDefFoundError:org/apache/commons/collections/Transformer

java.lang.NoClassDefFoundError: org/apache/commons/collections/Transformer尝试BeanMap从Apache Commons BeanUtils库使用时收到以下错误.

它由以下代码生成:BeanMap studentBeanMap = new BeanMap(cohortStudentData.get(row));其中cohortStudentData是bean列表.

我使用BeanListHandlerApache DBUtils从数据库中形成bean列表.

我从了解这个这个错误报告BeanMap依赖于Apache的集合框架.但是,我已将所有相关库导入到我的项目和我的课程中,如下所示:

外部图书馆清单

导入语句

有谁知道为什么会发生这种情况?

java runtime-error

4
推荐指数
2
解决办法
5万
查看次数

未知的CS1003错误

我无法为超过特定点的实体框架中的代码优先迁移而编译我的项目。我正在从xml中读取值以填充表。我有以下代码:

        //EnrolmentProgramStartDate

        var programQuery = from r in context.EnrolmentPrograms
                           select r;

        var programList = programQuery.ToList<Entities.MetaData.Enrolment.EnrolmentProgram>();

        resourceName = "LearnLogicElicos_WebApi.SeedData.MetaData.Enrolment.enrolment_program_start_date.xml";
        stream = assembly.GetManifestResourceStream(resourceName);
        xml = XDocument.Load(stream);
        List<Entities.MetaData.Enrolment.EnrolmentProgramStartDate> enrolmentStartdates = new List<Entities.MetaData.Enrolment.EnrolmentProgramStartDate>();

        foreach (var e in xml.Root.Elements("StartDate"))
        {
            DateTime.TryParse((string)e.Element("Start"), out var startDate);

            enrolmentStartdates.Add(new Entities.MetaData.Enrolment.EnrolmentProgramStartDate()
            {
                PrgmCode = (string)e.Element("ProgramCode"),
                StartDate = startDate
            });
        }

        var programStartdateWithFk = (from t1 in enrolmentStartdates
                                      join t2 in programList
                                      on t1.PrgmCode equals t2.PrgmCode
                                      select new Entities.MetaData.Enrolment.EnrolmentProgramStartDate
                                      {
                                          PrgmCode = t1.PrgmCode,
                                          StartDate = t1.StartDate,
                                          EnrolmentProgramFk = t2.PrgmPk
                                      });

        context.EnrolmentProgramStartDates.AddRange(programStartdateWithFk); …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework ef-migrations

1
推荐指数
1
解决办法
1202
查看次数

为什么我不能从事件监听器调用方法,但可以在课堂的其他地方?

我在控制器类中有以下代码,用于为组合框提供事件侦听器的 JavaFX GUI:

courseComboBox.getSelectionModel().selectedItemProperty()
                .addListener(new ChangeListener<String>() {
                    @Override
                    public void changed(
                            ObservableValue<? extends String> selected,
                            String oldValue, String newValue) {

                           // Do stuff

    }
});
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试从其中调用另一个方法时,我无法:

courseComboBox.getSelectionModel().selectedItemProperty()
                    .addListener(new ChangeListener<String>() {
                        @Override
                        public void changed(
                                ObservableValue<? extends String> selected,
                                String oldValue, String newValue) {

                                this.setClassList(courseProcessed);

                               // Do Stuff

   }
});
Run Code Online (Sandbox Code Playgroud)

不过,我可以在班级的其他地方调用该方法。更具体地说,我可以initialize()在该侦听器所在的控制器中的函数中调用它。为什么我会遇到这个问题?

java oop javafx event-listener

0
推荐指数
1
解决办法
1190
查看次数