我正在编写一个需要在日期中非常准确的应用程序,我想知道如何比较LocalDate实例..现在我使用的是:
LocalDate localdate1 = LocalDate().now();
LocalDate localdate2 = someService.getSomeDate();
localdate1.equals(localdate2);
Run Code Online (Sandbox Code Playgroud)
但我注意到我的应用程序给了我一些令人困惑的结果,我认为这是因为比较日期.
我正在考虑从1970年代开始获得时间并比较这两者,但我必须更容易,我很确定
我想创建包含我从后端接收的压缩文件的.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) 我很长一段时间都在寻找答案,却找不到任何有用的东西
在我的休息服务中,我保留了一些功能:/ 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) 我想从Spring控制器返回一个文件.我已经有API可以给我任何OutputStream的实现,然后我需要将它发送给用户.
所以流程是这样的:
获取输出流- >服务将此输出流传递给控制器- >控制器必须将其发送给用户
我想我需要输入流来做这件事,我也发现了Apache Commons api功能,如下所示:
IOUtils.copy(InputStream is, OutputStream os)
Run Code Online (Sandbox Code Playgroud)
但问题是,它将它转换到另一边 - >不是从os到is,而是从is到os.
要清楚,因为我看到答案没有正确的事情:
我使用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下载文件的方法,但它根本没用
(我不能以优雅的形式粘贴代码,不知道为什么,所以我将使用代码粘贴pastebin.com链接)
我的应用程序的"流程"是这样的:@Joeblade
用户输入url:/ download/{file_name}
Spring Controller捕获url并调用@Service层下载文件并将其传递给该控制器:http://pastebin.com/dW6zkGWT
现在@Service调用Dropbox API并按指定的file_name下载文件,并将其全部放到OutputStream中,然后传递它(以某种形式......可能是OutputStream,byte []数组或任何其他对象 - 我不知道哪个是更好地使用)到控制器:http …
让我们来看看这个例子:
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)
我的问题很简短:为什么?
我正在尝试在我的新笔记本电脑上安装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.9PATH
:C:/apache-maven-3.3.9/bin但是,正如你可能猜到的那样,它不起作用.更重要的是,bin
apache-maven-3.3.9中甚至没有文件夹!我找到了目录:C:/apache-maven-3.3.9/apache-maven/src/bin但它也无济于事.
如何正确设置?
我写了一段代码并想知道如何将它写得更优雅,在这里使用流是:
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)
提前致谢 :)
我经常在RESTful架构的上下文中听到"端点"这个短语.什么是端点?只是在Java Spring框架中使用@Controller注释的类中的方法?
实际上无法在谷歌找到这个问题的确切答案.
我需要为某些类创建测试.主项目(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注入测试类?也许我的做法是错的?
谢谢!
我使用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有良好的做法:)
我的问题是:在创建部署在某种servlet容器(如jetty或tomcat)上的应用程序时,为什么在执行JavaSE应用程序和ServletModule时需要创建AbstractModule?它们之间有什么区别?
我需要将Jersey与Guice整合在一起.是否有必要为泽西岛注册Guice的存在以某种方式使用它?我不能只是启用注射并在我想要的任何地方(普通类,过滤器,处理程序,服务,DAO等)执行它们吗?为什么我不能像在JavaSE应用程序中那样配置guice,而是需要使用ServletModule?
据我在网上看到,有很多使用Guice的HK2服务的例子,反之亦然,所以我认为它很重要?(必要?)
谢谢