小编pik*_*ik4的帖子

Spring Boot REST服务异常处理

我正在尝试建立一个大型REST服务服务器.我们使用的是Spring Boot 1.2.1 Spring 4.1.5和Java 8.我们的控制器正在实现@RestController和标准的@RequestMapping注释.

我的问题是Spring Boot为控制器异常设置了默认重定向/error.来自文档:

Spring Boot默认提供/错误映射,以合理的方式处理所有错误,并在servlet容器中注册为"全局"错误页面.

从使用Node.js编写REST应用程序多年来,对我来说,这对任何事情都是明智的.服务端点生成的任何异常都应在响应中返回.我无法理解为什么你会发送重定向到最有可能是Angular或JQuery SPA消费者的消费者,该消费者只是寻找答案而不能或不会对重定向采取任何行动.

我想要做的是设置一个全局错误处理程序,可以接受任何异常 - 有意地从请求映射方法抛出或由Spring自动生成(如果没有找到请求路径签名的处理程序方法,则为404),并返回标准格式化错误响应(400,500,503,404)到客户端没有任何MVC重定向.具体来说,我们将采用错误,使用UUID将其记录到NoSQL,然后使用JSON正文中日志条目的UUID向客户端返回正确的HTTP错误代码.

对于如何做到这一点,文档一直含糊不清.在我看来,你必须创建自己的ErrorController实现或以某种方式使用ControllerAdvice,但我看到的所有示例仍然包括将响应转发到某种错误映射,这没有帮助.其他示例表明,您必须列出要处理的每个Exception类型,而不是仅列出"Throwable"并获取所有内容.

任何人都可以告诉我我错过了什么,或指出我如何做到这一点的正确方向,而不建议Node.js更容易处理的链?

java rest spring exception-handling spring-boot

156
推荐指数
7
解决办法
21万
查看次数

反应组件和渲染之间的路由器差异

我真的没有得到反应路由器中的路由中渲染和组件道具之间的区别,在文档中它表示渲染不会创建新元素但组件确实如此,我试图回溯历史但我发现当我调用componentWillMount时在Route中使用render,它们是什么意思"如果你为组件属性提供内联函数,你将在每次渲染时创建一个新组件.这会导致现有组件卸载和新组件安装,而不仅仅是更新现有组件".

reactjs react-router

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

在Spring Boot 1.4中不推荐使用FilterRegistrationBean.*

我在项目中升级了Spring Boot依赖项,并且我意识到某些类(例如FilterRegistrationBean)已被弃用.

你知道如何在Spring Boot 1.4.1中实现Filter吗?

过滤豆

@Bean
public FilterRegistrationBean filterRegistrationBean() {
    AuthenticationFilter f = new AuthenticationFilter();
    FilterRegistrationBean registrationBean = new FilterRegistrationBean();
    registrationBean.setFilter(f);
    registrationBean.addInitParameter("defaultToken", defaultToken);
    registrationBean.addInitParameter("secretKey", secretKey);
    ArrayList<String> match = new ArrayList<>();
    match.add("/users/*");
    registrationBean.setUrlPatterns(match);
    return registrationBean;
}
Run Code Online (Sandbox Code Playgroud)

我的过滤器代码:

public class AuthenticationFilter implements Filter {

private String defaultToken;
private String secretKey;

private UserSessionTokenRepository userSessionTokenRepository;
private UserManager userManager;

@Override
public void init(FilterConfig filterConfig) throws ServletException {
    defaultToken = filterConfig.getInitParameter("defaultToken");
    secretKey = filterConfig.getInitParameter("secretKey");
    userSessionTokenRepository = WebApplicationContextUtils.getRequiredWebApplicationContext(filterConfig.getServletContext()).getBean(UserSessionTokenRepository.class);
    userManager = WebApplicationContextUtils.getRequiredWebApplicationContext(filterConfig.getServletContext()).getBean(UserManager.class);
}

@Override
public void doFilter(ServletRequest …
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc filter

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

"配置foo.bar已提供,但不是已知的配置"

当我以分布式模式(connect-runtime v1.0.0)启动连接器时,有几个必需的配置值.我说的是价值观:

offset.storage.topic
offset.storage.partitions
key.converter
config.storage.topic
config.storage.replication.factor
rest.port
status.storage.topic
key.converter.schemas.enable
value.converter.schemas.enable
internal.value.converter
internal.key.converter
internal.key.converter.schemas.enable
internal.value.converter.schemas.enable
status.storage.partitions
status.storage.topic
value.converter
offset.flush.interval.ms
offset.storage.replication.factor
...
Run Code Online (Sandbox Code Playgroud)

一旦连接器以这些属性的有意义值启动,它就会按预期工作.但是在启动时,日志变得充斥着像这样的条目

WARN  o.a.k.c.admin.AdminClientConfig.logUnused - The configuration 'offset.storage.topic' was supplied but isn't a known config.
Run Code Online (Sandbox Code Playgroud)

对于上述所有,强制配置值.有三个配置类正在记录警告:

org.apache.kafka.clients.consumer.ConsumerConfig
org.apache.kafka.clients.admin.AdminClientConfig
org.apache.kafka.clients.producer.ProducerConfig
Run Code Online (Sandbox Code Playgroud)

从现在起我还没有找到这种行为的原因.什么在这里丢失或出了什么问题导致这个警告?我不得不担心这个警告吗?

apache-kafka apache-kafka-connect

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

Scala与Java 9不兼容 - java.lang.NoClassDefFoundError

在我的电脑上安装Java 9之后运行一个示例Scala SBT项目,我接受了这个例外.我已经尝试了一些我发现的解决方案,但没有.

Java 9和Scala之间是否存在任何不兼容性?

Scala版本:2.12.3

Java版本:java版"9"

IDE:IntelliJ

提前致谢.

info] Compiling 7 Scala sources and 1 Java source to /Users/ermis/Projects/begining-scala/target/scala-2.12/classes...
[info] p.a.h.EnabledFilters - Enabled Filters (see <https://www.playframework.com/documentation/latest/Filters>):

play.filters.csrf.CSRFFilter
play.filters.headers.SecurityHeadersFilter
play.filters.hosts.AllowedHostsFilter

[info] play.api.Play - Application started (Dev)
Uncaught error from thread [play-dev-mode-akka.actor.default-
dispatcher-2]: javax/xml/bind/DatatypeConverter, shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled for for ActorSystem[play-dev-mode]
java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
    at io.jsonwebtoken.impl.Base64Codec.decode(Base64Codec.java:26)
    at io.jsonwebtoken.impl.DefaultJwtBuilder.signWith(DefaultJwtBuilder.java:106)
    at play.api.mvc.JWTCookieDataCodec$JWTFormatter.format(Cookie.scala:710)
    at play.api.mvc.JWTCookieDataCodec.encode(Cookie.scala:569)
    at play.api.mvc.JWTCookieDataCodec.encode$(Cookie.scala:567)
    at play.api.mvc.DefaultJWTCookieDataCodec.encode(Cookie.scala:760)
    at play.api.mvc.FallbackCookieDataCodec.encode(Cookie.scala:734)
    at play.api.mvc.FallbackCookieDataCodec.encode$(Cookie.scala:733)
    at play.api.mvc.DefaultSessionCookieBaker.encode(Session.scala:95)
    at play.api.mvc.CookieBaker.encodeAsCookie(Cookie.scala:414)
    at play.api.mvc.CookieBaker.encodeAsCookie$(Cookie.scala:413)
    at play.api.mvc.DefaultSessionCookieBaker.encodeAsCookie(Session.scala:95)
    at …
Run Code Online (Sandbox Code Playgroud)

java scala sbt java-9

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

JDK9模块如何帮助"封装范围的子包"?

我想知道JDK9模块.假设您有以下3个包:

com.company.product
com.company.product.impl_a
com.company.product.impl_b
Run Code Online (Sandbox Code Playgroud)

在包中的类product.impl_aproduct.impl_b只能通过在包中的类访问product.用户应该只使用product包中的类.你可以想像,传递的某些标志或属性将决定是否impl_aimpl_b将被使用,在内部.

在JDK8-中,您必须在内部impl_a和中创建这些类impl_b public.这有点糟糕,因为可以欺骗用户他们可以使用这些类.它完全有效并且允许.

JDK9如何在这里提供帮助?我们是否会声明一个模块product.impl_a和另一个模块,并product.impl_b声明导出的类只能由第三个模块访问product,这取决于两个模块product.impl_aproduct.impl_b?另外,实际上不可能申报一个新的模块,它依赖于product.impl_aproduct.impl_b?其他模块只能依赖于模块product吗?

java java-9

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

reference.conf与Akka中的application.conf文件

我是Akka的新手,我想了解reference.confapplication.conf文件之间的区别?

使用它们的正确方法是什么?我应该在每个文件中包含哪些变量?

configuration scala sbt akka akka-http

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

如何在不同的类中打印一个类中定义的String?

我有两节课.在第一个中,我使用它Scanner来检索用户的名称,然后将其存储在String被调用的中name.然后说,我开始一个新的课程,并希望打印出来,我该怎么做呢.所以我只是把这段代码写成一个例子,这样你就可以了解我想要问的内容.我会发布这两个课程.

import java.util.Scanner;

public class One {
    public static void main(String[] args) {

        String name;
        String start;
        Scanner input = new Scanner(System.in);

        System.out.println("Hello, what is your name?");
        name = input.nextLine();

        System.out.println("Hello "+name+", welcome! To ocntinue, please hit any key.");
        start = input.nextLine();

        if(start != null){
            Two object = new Two();
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

二等.

public class Two {
    public Two() {
        System.out.println("Ok "+One.name+", lets start!");
    }
}
Run Code Online (Sandbox Code Playgroud)

java string class

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

如何在 FilterRegistrationBean 中获取 @PathVariable?弹簧靴

我请求的路径是:

localhost:8080/companies/12/accounts/35
Run Code Online (Sandbox Code Playgroud)

我的 Rest Controller 包含此功能,我想在 Filter 中获取 companyId 和 accountId。

@RequestMapping(value = "/companies/{companyId}/accounts/{accountId}", method = RequestMethod.PUT)
public Response editCompanyAccount(@PathVariable("companyId") long companyId, @PathVariable("accountId") long accountId,
@RequestBody @Validated CompanyAccountDto companyAccountDto,
                                       HttpServletRequest req) throws ErrorException, InvalidKeySpecException, NoSuchAlgorithmException
Run Code Online (Sandbox Code Playgroud)

是否有任何功能可用于在过滤器内接收此信息?

java spring

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

类型Y是2个模块声明的一部分 - Angular 2

我想在我的angular 2应用程序中的两个独立模块中包含一个共享组件"SimpleRadialChartComponent".当我在每个模块的声明区域中传递此组件时,我接受了以下错误:

类型SimpleRadialChartComponent是2个模块的声明的一部分

如何在两个不同的模块中声明共享组件?

typescript angular

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

Custom Comparator.仅按Java 8中的字段进行比较

我想在Java 8中实现一个比较器,只使用Comparator.comparing(....)来比较字段.

我想要实现的功能如下:

List<DocumentLink> documentList = documentLinkService.getDocumentList(baseInstance);
        //call of custom comparator for DigitalFileCategory due to compare only by Name
        documentList = documentList.stream()
                .filter(doc -> category.comp(doc.getDigitalFileCategory()))
                .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

所以我需要一个布尔值返回值.DigitalFileCategory中的Comp方法:

public boolean comp(Object obj) {
    return super.equals(obj) ||
            (obj != null &&
                    getName() != null &&
                    getName().equals(((DigitalFileCategory) obj).getName()));
}
Run Code Online (Sandbox Code Playgroud)

任何想法,我该怎么做?当我尝试实现Comparator.comparing时,我要求getName为static.

DigitalFileCategory.class

public class DigitalFileCategory extends _Base {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "iddigitalfilecategory", nullable = false)
    private Integer iddigitalfilecategory;

    @Column(name = "Name", length = 64) …
Run Code Online (Sandbox Code Playgroud)

java compare compareto comparator java-8

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