= 常见问答
== 如何获取当前的 Locale
=== 直接从 request 对象中获取
[source,java]
----

request.getLocale();
----
=== 通过 LocaleResolver 获取
[source,java]
----
import org.springframework.web.servlet.LocaleResolver;

@Autowired private LocaleResolver localeResolver;

localeResolver.resolveLocale(request);	<1>
----

== Gradle 强制刷新依赖
当 gradle 不能正常获取最新的依赖时，可通过以下命令强制刷新
[source,bash]
----
gradle --refresh-dependencies
----

== Gradle 获取依赖清单
[source,bash]
----
gradle --refresh-dependencies
----

== 查看 gitlab 版本号
[source,bash]
----
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
----

== 如何解决 thymeleaf 模板中出现的特定关键词
thymeleaf 自带一些自有的关键词，当模板中出现了这样的关键词时，会出现错误,以下给出一些示例:
[source,javascript]
----
//[[ 是 thymeleaf 的关键词，而在 javascript 中可用于定义二维数组
var arrays =[[1,2],[3,4]];	//报错
var arrays =[ [1,2],[3,4] ];	//通过增加空格解决

//[( 是 thymeleaf 的关键词，出现在 javascript 的正则表达式中,无法通过增加空格实现
var reSection = /^\s*\[(.*)\]\s*$/;	//报错

//解决办法如下:
/*<![CDATA[*/
var reSection = /^\s*\[(.*)\]\s*$/;	//通过 /*<![CDATA[*/ .... /*]]>*/ 进行封装，thymeleaf 将跳过中间的处理，修复错误
/*]]>*/
----

== json 字符串及对象转换
=== 通过框架提供的工具类实现
[source,java]
----
import org.wsp.framework.core.util.JacksonObjectMapper;

//将 json 字符串转成 java 对象
T obj =JacksonObjectMapper.getDefaultObjectMapper().readValue(jsonString, T.class);

//将 json 字符串转成 java 数组
T[] arrays = JacksonObjectMapper.getDefaultObjectMapper().readValue(jsonString, T[].class);

//将 json 字符串转成 java 对象集合
List<String> objs =JacksonObjectMapper.getDefaultObjectMapper().readValue(jsonString, new TypeReference<List<String>>(){});

//将 java 对象转换成 json 字符串
String jsonString =JacksonObjectMapper.getDefaultObjectMapper().writeValueAsString(obj);
----

=== 通过依赖注入bean实现
[source,java]
----
import com.fasterxml.jackson.databind.ObjectMapper;

@Autowired ObjectMapper objectMapper;

//将 json 字符串转成 java 对象
T obj =JacksonObjectMapper.getDefaultObjectMapper().readValue(jsonString, T.class);

//将 json 字符串转成 java 数组
T[] arrays = JacksonObjectMapper.getDefaultObjectMapper().readValue(jsonString, T[].class);

//将 json 字符串转成 java 对象集合
List<String> objs =objectMapper.readValue(jsonString, new TypeReference<List<String>>(){});

//将 java 对象转换成 json 字符串
String jsonString =objectMapper.writeValueAsString(obj);
----

=== 格式化 json 字符串
[source,java]
----
String prettyString =JacksonObjectMapper.pretty(jsonString);
----

== xml 字符串及对象转换
=== 通过框架提供的工具类实现
[source,java]
----
import org.wsp.framework.core.util.XmlObjectMapper;

//将 xml 字符串转成 java 对象
T obj =XmlObjectMapper.getDefaultObjectMapper().readValue(xmlString, T.class);

//将 xml 字符串转成 java 对象集合
List<String> objs =XmlObjectMapper.getDefaultObjectMapper().readValue(jsonString, new TypeReference<List<String>>(){});

//将 java 对象转换成 xml 字符串
String jsonString =XmlObjectMapper.getDefaultObjectMapper().writeValueAsString(obj);
----

=== 格式化 xml 字符串
[source,java]
----
String prettyString =XmlObjectMapper.pretty(xmlString);
----

=== Mac 查看某个端口占用情况
[source,bash]
----
lsof -i tcp:8888
            ----
            端口号

# 显示结果示例
caddy     688 wangshaoping   11u  IPv6 0xfc05ae24eb2dd587      0t0  TCP *:ddi-tcp-1 (LISTEN)
idea    12474 wangshaoping  152u  IPv6 0xfc05ae24f0686587      0t0  TCP [::127.0.0.1]:62888->[::127.0.0.1]:ddi-tcp-1 (CLOSED)
eclipse 37328 wangshaoping   65u  IPv6 0xfc05ae24f0689587      0t0  TCP [::127.0.0.1]:58450->[::127.0.0.1]:ddi-tcp-1 (CLOSED)
----

=== Mac 测试某个端口的连通性
[source,bash]
----
nc -vz -w 2 localhost 8888
            --------- ----
            主机IP     端口

# 出现类似以下信息，表示连通
Connection to localhost port 8888 [tcp/ddi-tcp-1] succeeded!
----