小编Gri*_*ris的帖子

Locales作为Spring MVC中URL的一部分

我现在正在寻找多语言Web应用程序的框架.目前在我看来,最好的选择是Spring MVC.但是我面对的事实是开发人员的所有指导方针都建议使用LocaleChangeInterceptor以这种方式切换语言:

http://www.somesite.com/action/?locale=en

不幸的是,我想避免这种情况有很多原因.我怎样才能使语言代码成为URL的重要组成部分?例如:

http://www.somesite.com/en/action

谢谢.

UPD:我找到了以下解决方案.它尚未完成,但有效.解决方案包括两部分 - servlet过滤器和区域设置解析器bean.它看起来有点hackish,但我没有看到解决这个问题的其他方法.

public class LocaleFilter implements Filter
{

    ...

    private static final String DEFAULT_LOCALE = "en";
    private static final String[] AVAILABLE_LOCALES = new String[] {"en", "ru"};

    public LocaleFilter() {} 

    private List<String> getSevletRequestParts(ServletRequest request)
    {
        String[] splitedParts = ((HttpServletRequest) request).getServletPath().split("/");
        List<String> result = new ArrayList<String>();

        for (String sp : splitedParts)
        {
            if (sp.trim().length() > 0)
                result.add(sp);
        }

        return result;
    }

    private Locale getLocaleFromRequestParts(List<String> parts)
    {
        if (parts.size() > 0)
        {
            for (String lang …
Run Code Online (Sandbox Code Playgroud)

url locale spring-mvc

15
推荐指数
4
解决办法
8541
查看次数

在Spring Websockets上构建自定义API

我必须在Websockets上实现自定义API,这需要:

  • 自定义WAMP类子协议
  • 套接字URI中的路径参数

所以我有以下问题:

  • 是否有任何关于在Spring中实现自定义子协议的文档或指南?协议要求必须在Sec-Websocket-Protocol字段中指定确切的版本.哪个字段可以在服务器端读取?
  • 将路径参数传递给消息处理程序的正确方法是什么?我可以在处理程序注册中使用ant模式

        @Override 
        public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
            registry.addHandler(customHandler(), "/api/custom/{clientId}");
        }
    
    Run Code Online (Sandbox Code Playgroud)

    但是TextWebSocketHandler似乎没有.我现在通过以下方式扩展默认的HttpSessionHandshakeInterceptor来解决这个问题:

    public class CustomHandshakeInterceptor extends HttpSessionHandshakeInterceptor {
        private static final UriTemplate URI_TEMPLATE = new UriTemplate("/api/custom/{clientId}");
    
        @Override
        public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response,
                                       WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
            Map<String, String> segments = URI_TEMPLATE.match(request.getURI().getPath());
            attributes.put("CLIENTID", segments.get("clientId"));
    
            return super.beforeHandshake(request, response, wsHandler, attributes);
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    然后在TextWebSocketHandler中访问它:

    public class CustomHandler extends TextWebSocketHandler {
    
        @Override
        protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
            super.handleTextMessage(session, message);
    
            String clientId …
    Run Code Online (Sandbox Code Playgroud)

spring spring-websocket

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

标签 统计

locale ×1

spring ×1

spring-mvc ×1

spring-websocket ×1

url ×1