小编aza*_*lut的帖子

如何比较LocalDate实例Java 8

我正在编写一个需要在日期中非常准确的应用程序,我想知道如何比较LocalDate实例..现在我使用的是:

LocalDate localdate1 = LocalDate().now();
LocalDate localdate2 = someService.getSomeDate();
localdate1.equals(localdate2);
Run Code Online (Sandbox Code Playgroud)

但我注意到我的应用程序给了我一些令人困惑的结果,我认为这是因为比较日期.

我正在考虑从1970年代开始获得时间并比较这两者,但我必须更容易,我很确定

compare date java-8

63
推荐指数
2
解决办法
12万
查看次数

Spring REST - 创建.zip文件并将其发送到客户端

我想创建包含我从后端接收的压缩文件的.zip文件,然后将此文件发送给用户.2天我一直在寻找答案,无法找到合适的解决方案,也许你可以帮助我:)

现在,代码是这样的:(我知道我不应该在spring控制器中完成所有操作,但不关心它,它只是为了测试目的,找到让它工作的方法)

    @RequestMapping(value = "/zip")
    public byte[] zipFiles(HttpServletResponse response) throws IOException{
        //setting headers
        response.setContentType("application/zip");
        response.setStatus(HttpServletResponse.SC_OK);
        response.addHeader("Content-Disposition", "attachment; filename=\"test.zip\"");

        //creating byteArray stream, make it bufforable and passing this buffor to ZipOutputStream
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(byteArrayOutputStream);
        ZipOutputStream zipOutputStream = new ZipOutputStream(bufferedOutputStream);

        //simple file list, just for tests
        ArrayList<File> files = new ArrayList<>(2);
        files.add(new File("README.md"));

        //packing files
        for (File file : files) {
            //new zip entry and copying inputstream with file to zipOutputStream, after all closing …
Run Code Online (Sandbox Code Playgroud)

java rest zip spring zipoutputstream

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

antMatchers Spring Security模式,具有可更改的URL用户ID

我很长一段时间都在寻找答案,却找不到任何有用的东西

在我的休息服务中,我保留了一些功能:/ account/{id}/download我想在SecurityConfig java文件中设置access ROLE,只有ROLE_TOKENSAVED用户可以访问这个url

当{id}可更改时,模式应该如何?

我尝试了一些正则表达式模式,但没有任何工作,我想要的,这是我的一些尝试:

1. antMatchers("account/**/download").access(somerolehere)
2. antMatchers("account/\\d/download").access(somerolehere)
3. antMatchers("account/[\\d]/download").access(somerolehere)
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的服务:)

编辑:

    @Override
    protected void configure(HttpSecurity http) throws Exception {            
        http.authorizeRequests()
                .antMatchers("/admin**").access("hasRole('ROLE_ADMIN')")
                .antMatchers("/account*//**").access("hasRole('ROLE_USER') or hasRole('ROLE_ADMIN')")
                .antMatchers("/account/\\d+/download").access("hasRole('ROLE_TOKENSAVED')")
                .antMatchers("/user**").permitAll()
                //othercode...
    }
Run Code Online (Sandbox Code Playgroud)

java regex security spring spring-security

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

从具有OutputStream的Spring @Controller返回文件

我想从Spring控制器返回一个文件.我已经有API可以给我任何OutputStream的实现,然后我需要将它发送给用户.

所以流程是这样的:

获取输出流- >服务将此输出流传递给控制器- >控制器必须将其发送给用户

我想我需要输入流来做这件事,我也发现了Apache Commons api功能,如下所示:

IOUtils.copy(InputStream is, OutputStream os)
Run Code Online (Sandbox Code Playgroud)

但问题是,它将它转换到另一边 - >不是从osis,而是从isos.

编辑

要清楚,因为我看到答案没有正确的事情:
我使用Dropbox api并在OutputStream中接收文件,我希望在输入一些URL时将此输出流发送给用户

FileOutputStream outputStream = new FileOutputStream(); //can be any instance of OutputStream
DbxEntry.File downloadedFile = client.getFile("/fileName.mp3", null, outputStream);
Run Code Online (Sandbox Code Playgroud)

这就是为什么我在谈论将输出转换为输入,但不知道如何做到这一点.此外,我认为有更好的方法来解决这个问题(可能从输出流以某种方式返回字节数组)

我试图通过参数将servlet outputstream [response.getOutputstream()]传递给从dropbox下载文件的方法,但它根本没用

编辑2

(我不能以优雅的形式粘贴代码,不知道为什么,所以我将使用代码粘贴pastebin.com链接)

我的应用程序的"流程"是这样的:@Joeblade

  1. 用户输入url:/ download/{file_name}

  2. Spring Controller捕获url并调用@Service层下载文件并将其传递给该控制器:http://pastebin.com/dW6zkGWT

  3. 现在@Service调用Dropbox API并按指定的file_name下载文件,并将其全部放到OutputStream中,然后传递它(以某种形式......可能是OutputStream,byte []数组或任何其他对象 - 我不知道哪个是更好地使用)到控制器:http …

java spring file spring-mvc

11
推荐指数
4
解决办法
7万
查看次数

为什么iterator.forEachRemaining不会删除Consumer lambda中的元素?

让我们来看看这个例子:

public class ListIteratorTest {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("element1");
        list.add("element2");
        list.add("element3");
        list.add("element4");

        ListIterator<String> iterator = list.listIterator();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,这很好用:

    // prints elements out, and then appropriately removes one after another
    while (iterator.hasNext()){
        System.out.println(iterator.next());
        iterator.remove();
    }
Run Code Online (Sandbox Code Playgroud)

虽然这会抛出IllegalStateException:

        // throws IllegalStateException, why?
        iterator.forEachRemaining(n -> {
            System.out.println(n);
            iterator.remove();
        });
Run Code Online (Sandbox Code Playgroud)

我的问题很简短:为什么?

lambda listiterator java-8

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

安装Maven 3.3.9,如何设置M2_HOME,MAVEN_HOME和bin文件夹?

我正在尝试在我的新笔记本电脑上安装Maven 3.3.9,但这似乎非常困难.我不确定自3.0版本以来我已经大部分使用了什么,但现在我无法设置M2_HOME,MAVEN_HOME并且PATH变量正确.

Maven主页告诉我这样设置:

  • MAVEN_HOME:C:/apache-maven-3.3.9
  • M2_HOME:C:/apache-maven-3.3.9
  • PATH:C:/apache-maven-3.3.9/bin

但是,正如你可能猜到的那样,它不起作用.更重要的是,binapache-maven-3.3.9中甚至没有文件夹!我找到了目录:C:/apache-maven-3.3.9/apache-maven/src/bin但它也无济于事.

如何正确设置?

java path maven home-directory

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

如何用流写它?Java 8

我写了一段代码并想知道如何将它写得更优雅,在这里使用流是:

public boolean possibleToAddTask(LocalDate taskDate, final String username) {
        List<Task> userTasklist = find(username).getTaskList();
        for(Task task : userTasklist) {
            if(task.getDate().equals(taskDate)){
                return false;
            }
        }
        return true;
    }
Run Code Online (Sandbox Code Playgroud)

这里 - 从方法返回一些布尔值.如果某个任务中已存在指定的日期,则返回false,否则为true(因此返回类型将回答方法名称中引发的问题:))

我正在尝试使用流上的过滤器,但它只运行了一段时间,然后单元测试给了我一些意想不到的结果,所以我删除它并将其写成它的上层.现在我想美化它

以前是这样的:

public boolean possibleToAddTask(LocalDate taskDate, final String username) {
        List<Task> userTasklist = find(username).getTaskList();

        try {
            userTasklist.stream().filter(n -> n.getDate().equals(taskDate)).findFirst().get();
            return true;
        } catch (NoSuchElementException e) {
            return false;
        }
    }
Run Code Online (Sandbox Code Playgroud)

提前致谢 :)

java foreach filter java-8 java-stream

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

REST架构中的端点是什么?

我经常在RESTful架构的上下文中听到"端点"这个短语.什么是端点?只是在Java Spring框架中使用@Controller注释的类中的方法?

实际上无法在谷歌找到这个问题的确切答案.

java rest endpoint

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

测试Jersey应用程序,使用Jersey Injection内置框架(HK2)注入类

我需要为某些类创建测试.主项目(src/main/java/..)中的这个类很容易注入到另一个类中,因为我有自定义的ResourceConfig类,它声明必须扫描哪些包来寻找服务类.

现在我创建了测试目录(in src/test/java/..)并创建了一个类,如:

public class TheMentionedClassIntegrationTest {
    @Inject
    private TheMentionedClass theMentionedClass ;

    @Test
    public void testProcessMethod() {
        assertNotNull(theMentionedClass);
    }
}
Run Code Online (Sandbox Code Playgroud)

但问题是无论我做什么,这个类总是空的.在项目的另一个测试中,我正在使用JerseyTest课程.所以我试着在这里做同样的事情,TheMentionedClassIntegrationTest使用JerseyTest,覆盖configure方法扩展,创建我的私有ResourceConfig类,它注册Binder(整个项目的默认值)并注册TheMentionedClassIntegrationTest.

它没有用.我做了很多不同的尝试,但没有一个是成功的.我认为合作HK2非常困难,没有好的文件或者......

你们有没有想过如何将TheMentionedClass注入测试类?也许我的做法是错的?

谢谢!

java testing dependency-injection jersey hk2

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

更好的方法返回HttpStatus代码Spring REST

我使用spring开发了很长时间的休息服务,直到现在我返回http状态代码的方法是这样的:

    @RequestMapping(value = "/sth")
    public void name(HttpServletResponse response){
        boolean lever = service.doSomethingAndReturnTrueIfSucceedOrFalseIfNot();
        if(lever){
            response.setStatus(HttpServletResponse.SC_OK);
        }else{
            response.setStatus(HttpServletResponse.SC_BAD_REQUEST); //NOT_FOUND or whatever
        }
    }
Run Code Online (Sandbox Code Playgroud)

但我相信有更好的方法可以做到这一点.我知道我们有@ResponseStatus注释,但它是..静态的,我的意思是它总是返回相同的代码 - 但是如果出现问题怎么办?然后我不想要例如,200 OK作为响应代码.

我找到了这样的解决方案:将@ResponseStatus添加为静态响应代码,但是当控制器出现问题时,抛出一些自定义异常并将其捕获到新的@ControllerAdvice类中,并且还添加@ResponseStatus注释并返回正确的代码.

    @RequestMapping(value = "/sth")
    @ResponseStatus(HttpStatus.OK)
    public void name(HttpServletResponse response) throws Exception{
        boolean lever = service.doSomethingAndReturnTrueIfSucceedOrFalseIfNot();
        if(!lever){
            throw new SomethingWentWrongCustomException("Not okay..");
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后在课堂上抓住它:

@ControllerAdvice
public class SomethingControllerAdvice{
    @ExceptionHandler(value = SomethingWentWrongCustomException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public void someName(){
    }
}
Run Code Online (Sandbox Code Playgroud)

它似乎是相当优雅的解决方案,但代码是相当..罗嗦,不是吗?另一方面,如果我在整个应用程序中采用它并创建@ControllerAdvice类,那么它可能有意义你怎么看待它?还有其他更好的方法吗?

我希望这不是基于意见的问题,我不希望它成为.我只是不想使用反模式,并从begginings有良好的做法:)

java rest spring exception status

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

Jersey和Google Guice的整合

我的问题是:在创建部署在某种servlet容器(如jetty或tomcat)上的应用程序时,为什么在执行JavaSE应用程序和ServletModule时需要创建AbstractModule?它们之间有什么区别?

我需要将Jersey与Guice整合在一起.是否有必要为泽西岛注册Guice的存在以某种方式使用它?我不能只是启用注射并在我想要的任何地方(普通类,过滤器,处理程序,服务,DAO等)执行它们吗?为什么我不能像在JavaSE应用程序中那样配置guice,而是需要使用ServletModule?

据我在网上看到,有很多使用Guice的HK2服务的例子,反之亦然,所以我认为它很重要?(必要?)

谢谢

java integration dependency-injection jersey guice

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