小编Gui*_*reg的帖子

通过简单的字典使用kwarg(或args)有什么好处?

我想知道为什么我应该使用kwargs或args而不是传递简单的dict(如果是args,则使用元组)?

我写了一个非常简单的代码片段来检查到底发生了什么,而我找不到任何专家在字典上使用kwarg。如果有人能告诉我为什么我应该使用那些,我会很高兴的。现在,正如我所看到的,它只是更多的pythonic,但没有任何区别。同样,如果您使用简单的字典,那么它会更易读,因为所有语言都可以做到这一点,但不能采用kwargs方式。

def test_normal(input: dict):
    for element in input.items():
        print('Type: {}, raw: {}'.format(type(input), input))
        print('key: {}, value: {}'.format(element[0], element[1]))

def test_kwargs(**kwargs):
    for element in kwargs.items():
        print('Type: {}, raw: {}'.format(type(kwargs), kwargs))
        print('key: {}, value: {}'.format(element[0], element[1]))

test_normal(dict(name='Joseph'))
test_kwargs(name='Joseph')
Run Code Online (Sandbox Code Playgroud)
Type: <class 'dict'>, raw: {'name': 'Joseph'}
key: name, value: Joseph
Type: <class 'dict'>, raw: {'name': 'Joseph'}
key: name, value: Joseph
Run Code Online (Sandbox Code Playgroud)

python dictionary kwargs

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

具有不同 PathVariable 的相同休息端点

我正在尝试创建两个具有相同 uri 但类型不同的休息端点。第一个将按 EAN (Int) 搜索,第二个将按 id (String) 搜索。我可以以某种方式使端点过载吗?我在 Kotlin 中使用 Spring Boot

@GetMapping("/book/{ean}")
fun getABookByEan(@PathVariable ean: Int) : ResponseEntity<*> {
    repository.getByEan(ean)?.let {
        return ResponseEntity.status(HttpStatus.OK).body(it)
    }
    throw ItemNotFoundException()
}

@GetMapping("/book/{id}")
fun getABookById(@PathVariable id: String) : ResponseEntity<*> {
    repository.getById(id)?.let {
        return ResponseEntity.status(HttpStatus.OK).body(it)
    }
    throw ItemNotFoundException()
}
Run Code Online (Sandbox Code Playgroud)

在此之后,我得到了一个例外,即多个方法被映射到同一个端点。

...NestedServletException:请求处理失败;嵌套异常是 java.lang.IllegalStateException: Ambiguous handler methods mapping for HTTP path...

java rest spring kotlin spring-boot

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

使用全局异常处理程序在 SpringBoot 应用程序中处理 BindException

我有一个带有 post 请求的控制器。我正在尝试使用简单的 NotNull 注释来验证 POJO。我正在使用 ControllerAdvice 来处理异常。

@PostMapping("/something")
public MyResponse post(@Valid MyRequest request) {
   // nevermind...
}
Run Code Online (Sandbox Code Playgroud)
public class MyRequest {
  @NotNull
  private Integer something;
  // Getters setters nevermind...
}
Run Code Online (Sandbox Code Playgroud)
@ControllerAdvice
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
    @ExceptionHandler(value = BindException.class)
    protected ResponseEntity<Object> handleBindException(RuntimeException ex, WebRequest request) {
        return handleExceptionInternal(...);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我正在尝试使用它,但是当我启动应用程序时,我得到了以下信息:

org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.HandlerExceptionResolver]: Factory method 'handlerExceptionResolver' threw exception; nested exception is java.lang.IllegalStateException: Ambiguous @ExceptionHandler method mapped for [class org.springframework.validation.BindException]: {protected org.springframework.http.ResponseEntity com.liligo.sponsoredads.controller.RestResponseEntityExceptionHandler.handleBindException(java.lang.Exception,org.springframework.web.context.request.WebRequest), public final org.springframework.http.ResponseEntity …
Run Code Online (Sandbox Code Playgroud)

java spring exception spring-mvc spring-boot

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

使用Java9的Swagger UI(spring boot 2.0)

我正试图让swagger UI与我的服务一起工作.我正在使用spring boot 2.0和Java 9.为swagger添加了以下依赖项

compile('io.springfox:springfox-swagger2:2.8.0')
compile('io.springfox:springfox-swagger-ui:2.8.0')
Run Code Online (Sandbox Code Playgroud)

招摇是按照它应该配置的

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build();
    }
}
Run Code Online (Sandbox Code Playgroud)

编译得很好,但是当我使用BootRun命令启动应用程序时,它失败了:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'xmlModelPlugin': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [springfox.documentation.schema.XmlModelPlugin] from ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@4f8e5cde]

Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlType
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
    ... 25 common frames omitted
Run Code Online (Sandbox Code Playgroud)

可能是什么问题呢?与Java9不兼容?然后我能以某种方式使它工作吗?

spring swagger-ui spring-boot swagger-2.0 java-9

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