我有一个请求,例如:
example.com/search?sort=myfield1,-myfield2,myfield3
Run Code Online (Sandbox Code Playgroud)
我想拆分这些参数以List<String>在控制器中绑定排序,或者具有以下字段的类List<SortParam>在哪里:(字符串)和(布尔值)。SortParamnameask
所以最终的控制器看起来像这样:
@RequestMapping(value = "/search", method = RequestMethod.GET)
public ResponseEntity<MyResponse> search(@RequestParam List<String> sort) {
//...
}
Run Code Online (Sandbox Code Playgroud)
或者
@RequestMapping(value = "/search", method = RequestMethod.GET)
public ResponseEntity<MyResponse> search(@RequestParam List<SortParam> sort) {
//...
}
Run Code Online (Sandbox Code Playgroud)
有办法制作吗?
更新:
标准的参数传递方式不能满足我的要求。即我无法使用sort=myfield1&sort=-myfield2&sort=myfield3. 我必须使用逗号分隔的名称。
另外,我确实明白我可以@RequestParam String sort在控制器中接受,然后在控制器内分割字符串sort.split(","),但它也不能解决上述问题。
我有mp4文件(Big Buck Bunny):
持续时间:00:09:56.50
比特率:2048 kb/s
大小:1280x720
fps:29.97
我在2秒后设置了常量关键帧.
我想为HLS准备这个视频.
我使用它来生成m3u8播放列表并生成ts块:
ffmpeg -i input.mp4 -hls_time 2 out.m3u8
Run Code Online (Sandbox Code Playgroud)
但不幸的是,我不明白它是如何工作的.
我认为这个命令生成298个2秒的块,但它只生成152个不同长度的块(3 - 9秒).
但最奇怪的是它创建了m3u8文件,只有5个文件链接.
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:9
#EXT-X-MEDIA-SEQUENCE:148
#EXTINF:8.341667,
out148.ts
#EXTINF:7.841167,
out149.ts
#EXTINF:0.967633,
out150.ts
#EXTINF:8.341667,
out151.ts
#EXTINF:7.140467,
out152.ts
#EXT-X-ENDLIST
Run Code Online (Sandbox Code Playgroud)
我认为m3u8文件必须包含视频的所有部分.有人可以解释我如何每2秒钟创建298个块并正确填充m3u8文件吗?
我想减少垃圾收集器.使用此代码更好:
private MyException myException = new MyException();
public void frequentlyUsedMethod(){
try{
...
}catch(Exception e){
throw myException;
}
}
Run Code Online (Sandbox Code Playgroud)
而不是这个:
public void frequentlyUsedMethod(){
try{
...
}catch(Exception e){
throw new MyException();
}
}
Run Code Online (Sandbox Code Playgroud)
如果我在第一种情况下理解正确,我们只创建一次MyException,但在第二种情况下,我们将阻塞我们的堆并多次诱导垃圾收集器.
我有一个ConcurrentSkipListMap。我需要删除低于的元素key。
这是我可以执行的方法:
private ConcurrentNavigableMap<Double, MyObject> myObjectsMap = new ConcurrentSkipListMap<>();
//...
myObjectsMap = myObjectsMap.tailMap(10.25, false);
Run Code Online (Sandbox Code Playgroud)
看起来还不错,但是我对这些事实感到困惑:
1。
返回的地图受此地图支持,因此返回的地图中的更改会反映在此地图中,反之亦然。
这是否意味着垃圾回收器不会删除旧值?
即,我们删除了旧地图,现在有了新地图。但是此新地图得到了旧地图的支持。那么,旧地图会怎样?是将其删除还是将其永久保存在内存中?
2。
尝试插入超出其范围的键时,返回的映射将抛出IllegalArgumentException。
因此,现在我不能放置小于10.25且大于最后一个最大值的新键了吗?
我很困惑。然后如何正确地需要从ConcurrentSkipListMap中删除元素?
java concurrency java.util.concurrent sortedmap concurrentskiplistmap
我想为高可用性、自动故障转移和性能创建一个可扩展的 git 存储库。我认为 HDFS 非常适合这种情况。但我不知道是否可以将它与 git 存储库一起使用。
有人可以举个例子吗?如何使用 hdfs 存储 git 存储库?
我有一个可以工作的c转换器:
public class StringToLongConverter implements Converter<String, Long> {
@Override
public Long convert(String source) {
Long myDecodedValue = ...
return myDecodedValue;
}
}
Run Code Online (Sandbox Code Playgroud)
在网络配置中,我有:
@Override
public void addFormatters (FormatterRegistry registry) {
registry.addConverter(new StringToLongConverter());
}
Run Code Online (Sandbox Code Playgroud)
一切都很好,但它适用于所有控制器,我只需要为某些控制器执行它。
//I need this controller to get myvalue from converter
@RequestMapping(value = "{myvalue}", method = RequestMethod.POST)
public ResponseEntity myvalue1(@PathVariable Long myvalue) {
return new ResponseEntity<>(HttpStatus.OK);
}
//I need this controller to get myvalue without converter
@RequestMapping(value = "{myvalue}", method = RequestMethod.POST)
public ResponseEntity myvalue2(@PathVariable Long myvalue) { …Run Code Online (Sandbox Code Playgroud) java ×4
spring ×2
spring-mvc ×2
concurrency ×1
converters ×1
ffmpeg ×1
git ×1
gitlab ×1
hadoop ×1
hdfs ×1
heap ×1
m3u8 ×1
repository ×1
sortedmap ×1
spring-boot ×1
spring-rest ×1