小编Ale*_*ndr的帖子

是否可以在 Spring 控制器中拆分请求参数?

我有一个请求,例如:

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(","),但它也不能解决上述问题。

java spring spring-mvc spring-restcontroller spring-rest

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

如何使用FFMPEG创建具有恒定持续时间的m3u8播放列表和mpeg-ts块?

我有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文件吗?

ffmpeg video-encoding http-live-streaming m3u8

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

为了有效地使用垃圾收集器,在Java中保留异常是否更好?

我想减少垃圾收集器.使用此代码更好:

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,但在第二种情况下,我们将阻塞我们的堆并多次诱导垃圾收集器.

java heap garbage-collection

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

如何删除要在ConcurrentSkipListMap中键入的元素?

我有一个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

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

我们可以使用 HDFS 来存储 git 存储库吗?

我想为高可用性、自动故障转移和性能创建一个可扩展的 git 存储库。我认为 HDFS 非常适合这种情况。但我不知道是否可以将它与 git 存储库一起使用。

有人可以举个例子吗?如何使用 hdfs 存储 git 存储库?

git hadoop repository hdfs gitlab

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

如何仅将 Spring Converter 用于某些控制器?

我有一个可以工作的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 spring spring-mvc converters spring-boot

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