小编Dir*_*ski的帖子

SpringMVC:取决于url扩展名的映射行为不一致

我有一个基于RESTful spring的端点,可以将存储在db中的资源存储到javascript编辑器中.相关部分归结为:

@RestController
@RequestMapping(ThemeEndpoint.ENDPOINT_NAME)
public class ThemeEndpoint {

public static final String ENDPOINT_NAME = "/themes"; 

    @RequestMapping(value="/{id}/css/{assetName:.*}", method=RequestMethod.GET)
    public Asset getCssItem(
        @PathVariable("id") ThemeId id, 
        @PathVariable("assetName") String name) {
    CssThemeAsset themeAsset = themeService.getCssAsset(
                id, ThemeAssetId.fromString(name));
    Asset asset = new Asset();
    asset.name = themeAsset.getName();
    asset.text = themeAsset.getContent();
    return asset;
}
Run Code Online (Sandbox Code Playgroud)

对于像这样的网址,这可以正常工作

http://localhost:8080/app-url/rest/themes/ac18a080-a2f1-11e3-84f4-600308a0bd14/css/main.less
Run Code Online (Sandbox Code Playgroud)

但是一旦我将扩展名更改为,就会失败.css.

经过一些调试后,我非常确定如果我使用的是url,请求甚至都没有映射

http://localhost:8080/app-url/rest/themes/ac18a080-a2f1-11e3-84f4-600308a0bd14/css/main.css
Run Code Online (Sandbox Code Playgroud)

对于高日志级别,我可以看到映射是由spring捕获的:

org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping 
    - Mapped "{[/themes/{id}/css/{assetName:.*}],methods=[GET],params=[],headers=[],
                consumes=[],produces=[application/json],custom=[]}" 
      onto public xxx.endpoint.ThemeEndpoint$Asset
          xxx.endpoint.ThemeEndpoint.getCssItem(
              net.lacho.svc.themes.api.ThemeId,java.lang.String)   
Run Code Online (Sandbox Code Playgroud)

并且使用非.css扩展名调用控制器:

Found 1 matching mapping(s) for [/themes/ac18a080-a2f1-11e3-84f4-600308a0bd14/css/main.less]
  : [{[/themes/{id}/css/{assetName:.*}],methods=[GET],params=[],headers=[],
        consumes=[],produces=[application/json],custom=[]}]
Run Code Online (Sandbox Code Playgroud)

但是只要我使用.css作为扩展名 - bang:

Looking up …
Run Code Online (Sandbox Code Playgroud)

spring-mvc spring-4

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

Eureka在spring-cloud-netflix上使用基于DNS的配置,所有实例都显示为不可用

我正在尝试使用基于DNS的EIP配置在aws上设置eureka集群,如https://github.com/Netflix/eureka/wiki/Configuring-Eureka-in-AWS-Cloud所述

一切似乎都有效,但尤里卡仪表板坚持认为尤里卡实例不可用.我现在想知道这是否只是一个问题(我想是这样)或者我是否遗漏了什么.

据我了解仪表板中的"不可复制副本"逻辑,这是因为eureka正在比较注册主机名和副本主机名.实例在发现客户端注册其内部VPC ip,但在查找副本对等时使用他们的EIP(奇怪的是,在eureka日志中我可以看到内部他们也在使用内部VPC ip).

问题是:这只是一些我不应该担心的化妆品问题,还是因为一些配置错误而等待介入的更大问题?如果它只是一个ui的东西:我能以某种方式"修复"吗?

在此输入图像描述

编辑:

也许相关https://github.com/spring-cloud/spring-cloud-netflix/issues/102#issuecomment-74446709

spring spring-cloud netflix-eureka spring-cloud-netflix

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

如何在slack中获取登录用户的IP

我想设置一个斜杠命令 /ip ,它可以给我当前登录用户的 ip。我尝试设置相同但每当我尝试使用 /ip 它都会将其作为输出,这绝对不是我的公共 ip(这一直在变化)。它实际上是在提供松弛服务器的 ip。

我正在使用服务来获取 ip。我知道我可以通过这个获取用户的 ip ,但我想要这个付费功能的替代品。

在此处输入图片说明

ip-address slack-api slack

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

Java类型级别注释和私有成员可见性

我试图将spring的baseurl外化为控制器类@Controller的静态String成员.如果我这样做,我必须声明成员公开 - 否则它将不会被@RequestMapping注释看到.我无法理解为什么 - 这不是课堂的注释部分吗?

有人可以解释为什么我被迫不在private这里使用?

无效:

@Controller
@RequestMapping(PendingApprovalsController.CONTROLLER_URL)
public class PendingApprovalsController {
    private static final String CONTROLLER_URL = "/some/url";
        ...
}
Run Code Online (Sandbox Code Playgroud)

有效:

@Controller
@RequestMapping(PendingApprovalsController.CONTROLLER_URL)
public class PendingApprovalsController {
    public static final String CONTROLLER_URL = "/some/url";
        ...
}
Run Code Online (Sandbox Code Playgroud)

java annotations

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