小编pas*_*oop的帖子

具有错误处理的Spring MVC Rest服务控制器正确完成了吗?

我想知道如何正确实现一个应该作为REST服务的Spring Controller.特别是我想尝试使界面尽可能的RESTful.此外,我想使用HTTP错误代码,以便我的客户端可以采取相应的行动.

我想知道如何实现我的方法,所以他们返回JSON,如果一切正常(在响应的主体中)或抛出一个http错误代码以及一个自定义原因它没有工作(可能是来自DAO的错误或数据库).但是我不确定哪一个是正确的方法?返回一个String并添加值以返回Model,或者返回一个HashMap并将我的东西放在那里?或直接返回对象?但是如果发生错误并且我不能返回所述类怎么办?返回null而不是?我发布了2-3种可以想象的方法:

@RequestMapping(value="/addUser", method= RequestMethod.POST)
public String addUser(@RequestBody User user, HttpServletResponse response, Model model) throws Exception{

    try{
        userService.addUser(user);
        model.addAttribute("user", userService.getUser(user.getUsername(), user.getPassword()));
        return "user";
    }catch(Exception e){
        model.addAttribute("error", e.toString());
        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.toString());
        return "error";
    }
}
Run Code Online (Sandbox Code Playgroud)

或者更确切地说:

@RequestMapping(value="/addUser", method= RequestMethod.POST)
public @ResponseBody Map addUser(@RequestBody User user, HttpServletResponse response){
    Map map = new HashMap();
    try{
        userService.addUser(user);
        map.put("success", true);
        map.put("username", user.getUsername());
    }catch (KeyAlreadyExistsException e){
        map.put("success", false);
        map.put("Error", e.toString());
        response.sendError(HttpServletResponse.SC_FORBIDDEN, e.toString());
    }catch(Exception e){
        map.put("success", false);
        map.put("Error", e.toString());
        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.toString());
    }
    finally {
        return map;
    } …
Run Code Online (Sandbox Code Playgroud)

java rest spring spring-mvc

25
推荐指数
3
解决办法
3万
查看次数

将Java类结构转换为Python类

我们试图避免在一起使用Java和Python的项目中重复代码.大多数代码库都是用Java编写的,由于机器学习环境的普及,现在正在添加Python.

在绿地场景中,我们从某事开始.像swagger或protobuf,从生成的代码中派生出模型.但这现在不起作用.

J类带有一些注释注释,它们的目标是Java 8.

在研究时,我发现了以下可能的路径将类的结构(没有方法)转换为Python类结构:

  1. 从Java类生成XML模式
  2. 从xml架构文件生成Python类

额外的好处:这两种语言实际上是通过我们项目中的XML进行通信的,因此模式文件对其他用例很有帮助.我们使用maven来构建Java,因此将它包含在maven进程中会很不错.

我把它包含在pom.xml中:

<!-- https://mvnrepository.com/artifact/org.codehaus.mojo/jaxb2-maven-plugin -->
<dependency>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxb2-maven-plugin</artifactId>
    <version>2.3.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

以及默认的插件配置

<plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxb2-maven-plugin</artifactId>
            <executions>
                <execution>
                    <id>schemagen</id>
                    <goals>
                        <goal>schemagen</goal>
                    </goals>
                </execution>
            </executions>
            <!--
                Use default configuration, implying that sources are read
                from the directory src/main/java below the project basedir.

                (i.e. getProject().getCompileSourceRoots() in Maven-speak).
            -->
        </plugin>
Run Code Online (Sandbox Code Playgroud)

但是我收到了一个错误

[ERROR] Failed to execute goal org.codehaus.mojo:jaxb2-maven-plugin:2.3.1:schemagen (default-cli) on project common: JAXB errors arose while SchemaGen compiled sources to XML. -> [Help 1]       
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal …
Run Code Online (Sandbox Code Playgroud)

python java xml oop jaxb

12
推荐指数
2
解决办法
2549
查看次数

How to generate python class files from protobuf

I am trying to transfer large amounts of structured data from Java to Python. That includes many objects that are related to each other in some form or another. When I receive them in my Python code, it's quiet ugly to work with the types that are provided by protobuf. My VIM IDE crashed when trying to use autocomplete on the types, PyCharm doesn't complete anything and generally it just seems absurd that they don't provide some clean class definition …

python protocol-buffers grpc

9
推荐指数
2
解决办法
7784
查看次数

完成所有 Python 单元测试后拆除所有打开的线程

该线程详细讨论了为什么终止线程不是一个好主意。当我们谈论一个实际的计划时,我同意。我正在为几个组件编写单元测试以及它们之间的一些集成测试。有些需要线程。当测试失败时,某些线程保持打开状态,并锁定在.get()队列的调用中。这会导致整个测试套件陷入困境并且不完整。我正在运行ptw(pytest watch) 或 pytest 的自定义循环,以inotifywait监视文件中的更改以重新运行套件。

当所有测试完成后,我希望套件杀死任何剩余的线程以完成循环,而不是卡在由于测试失败而刚刚打开的某个线程上。这可能吗?

python testing multithreading

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

使用代码格式化程序时如何逐行保留 git 作者?

我们厌倦了掉毛。所以我们想在我们的项目中使用黑色。不幸的是,它几乎改变了我们项目中的所有其他行,这会使我们丢失大部分作者信息。我们annotate在 pycharm 中使用或git blame很多来确定在查看特定代码片段时与谁交谈。在一次提交中更改大量文件时,如何保留这些信息?

编辑:由于这是这个问题的重复,我想专注于“尽可能好”的方法。

让我们假设 lint 提交是由人工(但已知)作者创建的,因此用作标志。那么是否可以创建一个git blame类似的输出来显示自此关键 lint 提交以来的所有作者以及在该提交中更改的行的任何先前作者?

我意识到这对于拆分/合并的线路效果不佳,但它至少提供了一种更快的方法来限制潜在人员与 1、2、3 人交谈的范围。

git lint git-blame python-black

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

H2 in-mem-DB与hibernate设置为创建给我表未找到错误

我想在内存DB中设置一个带有hibernate,spring mvc和H2的项目(现在).当一切都启动(在码头)我得到错误,说表不存在.

这是我得到的错误:

Okt 09, 2013 3:42:47 PM org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: HHH000227: Running hbm2ddl schema export
Okt 09, 2013 3:42:47 PM org.hibernate.tool.hbm2ddl.SchemaExport perform
ERROR: HHH000389: Unsuccessful: alter table PUBLIC.Object drop constraint FK_9sd2x4ehbugdjyrp1xqmsjw00
Okt 09, 2013 3:42:47 PM org.hibernate.tool.hbm2ddl.SchemaExport perform
ERROR: Tabelle "OBJECT" nicht gefunden
Table "OBJECT" not found; SQL statement:
...
Run Code Online (Sandbox Code Playgroud)

如果我没有像这样设置Hibernate,那就没关系:

hibernate.hbm2ddl.auto=create
Run Code Online (Sandbox Code Playgroud)

H2的连接字符串是这样的:

jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=TRUE
Run Code Online (Sandbox Code Playgroud)

我可以使用IntelliJ连接到数据库,所以它就在那里..

我希望Hibernate为我生成表,然后是约束和其他任何后续但由于某种原因它不会那样做.它可能是用户权限吗?这些是我设置的用户设置:

jdbc.user=sa
jdbc.pass=
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏!谢谢 :)

UPDATE

如果我将连接字符串更改为:

jdbc.url=jdbc:h2:~/db/database.db;DB_CLOSE_ON_EXIT=TRUE;INIT=create schema IF NOT EXISTS generic;
Run Code Online (Sandbox Code Playgroud)

它似乎工作.但是为什么它在内存中不起作用以及为什么它在我将默认模式设置为"公共"之前不起作用(这已经是我已经想到的可能只是将我的东西转储到那里......)IDK!

hibernate h2

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

使用GRPC流式传输多种类型的最佳方法

我有一个服务器将消息传递给客户端.消息具有不同类型,服务器具有客户端的通用handleMessagepassMessage方法.

现在我打算对此进行调整并使用GRPC.我知道我可以通过在我的.proto文件中定义服务来公开服务器的所有方法.但是还有一种方法可以:

  • 异质类型
  • 一个RPC调用
  • 使用GRPC

oneof一个允许我设置只有一个属性设置的消息.我可以拥有它MessageContainer,oneof并且我的所有消息类型都包含在此容器中.现在容器只有一种类型,我只需要写一个

service {
   rpc messageHandler(ClientInfo)  returns (stream MessageContainer)
}
Run Code Online (Sandbox Code Playgroud)

这样,服务器可以通过一个唯一的接口将多种类型流式传输到客户端.这有意义吗?或者将所有方法单独暴露是否更好?

UPDATE

我找到了这个争论oneof的方法.我明白这一点,因为它避免了我必须创建潜在的数十个服务和存根.它还有助于确保它是一个FIFO设置,而不是多路复用多个流,而不确定哪个消息首先出现.但由于某种原因它感觉很脏.

python java protocol-buffers grpc

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

oauth2-proxy 身份验证调用在 kubernetes 集群上运行缓慢,并带有 nginx 入口的身份验证注释

我们使用本页描述的方法保护了 K8S 集群上的一些服务。具体来说,我们有:

  nginx.ingress.kubernetes.io/auth-url: "https://oauth2.${var.hosted_zone}/oauth2/auth"
  nginx.ingress.kubernetes.io/auth-signin: "https://oauth2.${var.hosted_zone}/oauth2/start?rd=/redirect/$http_host$escaped_request_uri"
Run Code Online (Sandbox Code Playgroud)

设置要保护的服务,并且我们遵循本教程,每个集群仅部署一个 oauth2_proxy。我们设置了 2 个代理,两者都具有亲和性,都放置在与 nginx 入口相同的节点上。

$ kubectl get pods -o wide -A | egrep "nginx|oauth"                                                                    
infra-system   wer-exp-nginx-ingress-exp-controller-696f5fbd8c-bm5ld        1/1     Running   0          3h24m   10.76.11.65    ip-10-76-9-52.eu-central-1.compute.internal     <none>           <none>
infra-system   wer-exp-nginx-ingress-exp-controller-696f5fbd8c-ldwb8        1/1     Running   0          3h24m   10.76.14.42    ip-10-76-15-164.eu-central-1.compute.internal   <none>           <none>
infra-system   wer-exp-nginx-ingress-exp-default-backend-7d69cc6868-wttss   1/1     Running   0          3h24m   10.76.15.52    ip-10-76-15-164.eu-central-1.compute.internal   <none>           <none>
infra-system   wer-exp-nginx-ingress-exp-default-backend-7d69cc6868-z998v   1/1     Running   0          3h24m   10.76.11.213   ip-10-76-9-52.eu-central-1.compute.internal     <none>           <none>
infra-system   oauth2-proxy-68bf786866-vcdns                                 2/2     Running   0          14s     10.76.10.106   ip-10-76-9-52.eu-central-1.compute.internal     <none>           <none>
infra-system   oauth2-proxy-68bf786866-wx62c                                 2/2     Running …
Run Code Online (Sandbox Code Playgroud)

proxy oauth nginx kubernetes

6
推荐指数
2
解决办法
1663
查看次数

iPhone X的圆形边缘对具有底部工具栏或标签的混合应用程序有何影响?

根据IOS开发者网站,Apple提供的UI元素会自动适应新手机附带的新布局.因此,浏览器应用程序也应该正常工作,而不会留下圆角后半切的基本按钮.但是在Cordova容器中运行的混合应用程序呢?它们如何适应iPhone屏幕的新形状?

用于ip x的ios人机界面指南

棒的离子开发指南

iphone ios cordova ionic-framework

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

确定 python 函数是否已更改

语境

我正在尝试在数据处理框架(kedro)中缓存执行。为此,我想为 python 函数开发一个唯一的哈希值,以确定函数体(或该函数调用的函数和模块)中的任何内容是否已更改。我调查了一下__code__.co_code。虽然这很好地忽略了注释、间距等,但当两个函数明显不同时它也不会改变。例如

def a():
  a = 1
  return a

def b():
  b = 2
  return b

assert a.__code__.co_code != b.__code__.co_code
Run Code Online (Sandbox Code Playgroud)

失败了。所以这两个函数的字节码是相等的。

最终目标:确定函数的代码或其任何数据输入是否已更改。如果不存在并且结果已经存在,则跳过执行以节省运行时间。

问题:如何获取 python 中函数代码的指纹?

同事提出的另一个想法是:

import dis

   def compare_instructions(func1, func2):
       """compatre instructions of two functions"""
       func1_instructions = list(dis.get_instructions(func1))
       func2_instructions = list(dis.get_instructions(func2))
 
       # compare every attribute of instructions except for starts_line
       for line1, line2 in zip(func1_instructions, func2_instructions):
           assert line1.opname == line2.opname
           assert line1.opcode == line2.opcode
           assert line1.arg == line2.arg
           assert line1.argval == line2.argval …
Run Code Online (Sandbox Code Playgroud)

python

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

当窗口成为焦点时,IntelliJ 处于“阻塞”模式

我使用 i3 作为窗口管理器。当我将焦点切换到 Intellij(实际上是 WebStorm,但底层是相同的引擎)时,光标不会出现。我发现点击ctrl+f->esc是一种让光标返回的解决方法(进入 IDE 搜索并再次退出)。或者,我可以单击IDE 的编辑器字段来显示光标。但是,我不可能将焦点切换到 IDE 并开始使用我的 vim 绑定(或为此键入文本)。

所以:

  1. 专注于IDE
  2. 将焦点移开(向左、向右等等)然后再移回来
  3. 无光标 -> ctrl+f--esc -> 光标返回先前模式

奇怪的是,这在 PyCharm 中不会发生。我将所有设置从 pycharm 导入到 webstorm,但错误仍然存​​在。禁用 IdeaVIM 也没有帮助。

是否有一个设置或配置允许在 IDE 窗口进入窗口管理器焦点时定义“焦点”?或者是否存在与此相关的已知错误?

intellij-idea

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

Apache Beam over Apache Kafka流处理

在流处理方面,Apache Beam和Apache Kafka有什么区别?我也试图掌握技术和程序上的差异。

请通过您的经验报告帮助我理解。

stream-processing apache-kafka apache-beam apache-kafka-streams

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

如何避免三元运算符赋值的重复?

从中获取大量配置值时os.environ,在python代码中使用默认值可以轻松地允许应用程序在许多上下文中启动.典型的django settings.py有很多

SOME_SETTING = os.environ.get('SOME_SETTING')
Run Code Online (Sandbox Code Playgroud)

线.

为了提供合理的默认值,我们选择了

SOME_SETTING = os.environ.get('SOME_SETTING') or "theValue"
Run Code Online (Sandbox Code Playgroud)

但是,由于调用应用程序,这很容易出错

SOME_SETTING="" 
Run Code Online (Sandbox Code Playgroud)

manage.py

将导致SOME_SETTING设置为theValue而不是明确定义""

有没有办法在python中使用三元组分配值a = b if b else d而不重复b或将其分配给速记变量?

如果我们看一下,这就变得很明显

SOME_VERY_LONG_VAR_NAME = os.environ.get('SOME_VERY_LONG_VAR_NAME') if os.environ.get('SOME_VERY_LONG_VAR_NAME') else 'meh'
Run Code Online (Sandbox Code Playgroud)

能够做类似的事情会好得多

SOME_VERY_LONG_VAR_NAME = if os.environ.get('SOME_VERY_LONG_VAR_NAME') else 'meh'
Run Code Online (Sandbox Code Playgroud)

python

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