小编Oce*_*nic的帖子

commons httpclient - 将查询字符串参数添加到GET/POST请求

我正在使用公共HttpClient对Spring servlet进行http调用.我需要在查询字符串中添加一些参数.所以我做了以下事情:

HttpRequestBase request = new HttpGet(url);
HttpParams params = new BasicHttpParams();
params.setParameter("key1", "value1");
params.setParameter("key2", "value2");
params.setParameter("key3", "value3");
request.setParams(params);
HttpClient httpClient = new DefaultHttpClient();
httpClient.execute(request);
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用servlet读取参数时

((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest().getParameter("key");
Run Code Online (Sandbox Code Playgroud)

它返回null.实际上parameterMap是完全空的.当我在创建HttpGet请求之前手动将参数附加到url时,参数在servlet中可用.当我使用附加了queryString的URL从浏览器中访问servlet时也是如此.

这里的错误是什么?在httpclient 3.x中,GetMethod有一个setQueryString()方法来追加查询字符串.4.x中的等价物是什么?

java apache-httpclient-4.x

70
推荐指数
4
解决办法
13万
查看次数

Gradle multiproject提供"无法在项目中找到属性'sourceSets'错误

我有很好的gradle配置,建立一切都很好.但是我的多项目构建中的一个项目来自其他项目,我很乐意将它移动到另一个git repo并配置子模块来处理它.

首先,我将Project及其资源移至子文件夹Libraries/MovedProject.在改变了gradle配置中的一些行后,它工作正常.但后来我决定为这个项目编写一个新的build.gradle,并将所有配置从主项目移到那里.

这就是一切都停止工作的地方.当我试图调用任何任务时,它总是以Could not find property 'sourceSets' on project ':Libraries/MovedProject'.负责的是:

dependencies {
    ...
    if (noEclipseTask) {
        testCompile project(':Libraries/MovedLibrary').sourceSets.test.output
    }
}
Run Code Online (Sandbox Code Playgroud)

我用它来运行我使用其他项目的类的测试.如果我删除该行,则只有当它到达使用MovedProject的项目的compileTestJava任务时,构建才会失败.如果我删除该行并打电话,gradle :Libraries/MovedLibrary:properties我可以看到:

...
sourceCompatibility: 1.7
sourceSets: [source set main, source set test]
standardOutputCapture: org.gradle.logging.internal.DefaultLoggingManager@1e263938
...  
Run Code Online (Sandbox Code Playgroud)

同时gradle :Libraries/MovedLibrary:build建立正确.

目前我已经设置了以下所有内容:

  1. 目录:

    • / SomeMainProject1
    • / SomeMainProject2
    • / SomeMainProject3
    • /库
      • / MovedProject
        • 的build.gradle
        • dependencies.gradle
        • project.gradle
        • tasks.gradle
    • /生成器
      • dependencies.gradle
      • project.gradle
      • tasks.gradle
    • 的build.gradle
    • settings.gradle
  2. settings.gradle

    include Libraries/MovedProject,
            SomeMainProject1,
            SomeMainProject2,
            SomeMainProject3
    
    Run Code Online (Sandbox Code Playgroud)
  3. MovedProject的sourceSets定义Libraries/MovedProject/project.gradle如下:

    sourceSets {
        main { …
    Run Code Online (Sandbox Code Playgroud)

multi-project gradle

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

评估集合表达式

我将一系列元素组织成n个非不相交的集合.我有使用这些集合构建的表达式,使用union/intersection/difference运算符.因此,给定一个元素,我需要评估这些m表达式,以找出哪些"派生"集合包含该元素.我不想计算"派生"集,因为它会非常节省时间和空间.有没有办法通过查看其表达式来说明元素是否会位于其中一个派生集中?例如,如果表达式是C = AUB并且元素位于集合A中,那么我可以说它将位于集合C中.是否有任何C库来执行这种性质的计算?

c c++ set

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

基于路径变量的弹簧安全性授权

我的用例是基于@PathVariable参数进行身份验证然后授权用户。我需要执行一些自定义代码来授权主体。我不确定采取的方法-

  1. 我已经实现了用于身份验证的自定义AbstractAuthenticationProcessingFilter&AuthenticationProvider,最终将角色授予主体。我可以检查servlet请求中的路径变量(使用HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE),并将其他权限添加到身份验证令牌。然后,我可以使用内置的hasRole,hasPermission表达式来实现访问控制。

  2. 我可以扩展WebSecurityExpressionRoot并实现自定义AbstractSecurityExpressionHandler并定义我自己的表达式,以在拦截URL访问控制表达式中使用。我不确定在WebSecurityExpressionRoot实现中定义自定义方法时如何访问@PathVariables。

哪种方法更可取,或者有其他方法可以完全做到这一点?

spring spring-security

5
推荐指数
2
解决办法
3100
查看次数

Java 8流 - 修改组中的所有元素

我有一组A类对象

class A {
    String code;
    long timestamp;
    long largestTimestamp;
}
Run Code Online (Sandbox Code Playgroud)

我必须为每个对象填充maximumTimestamp字段(具有相同代码的对象组中的最大"timestamp"值).我可以通过以下两个步骤完成此操作 -

Map<String, Long> largestTimestampMap = list.stream().collect(Collectors.toMap(A::getCode, A::getTimestamp, Long::max));
list.forEach(a -> a.setLargestTimestamp(largestTimestampMap.get(a.getCode())));
Run Code Online (Sandbox Code Playgroud)

有没有办法将这些组合成一个流链?

java java-8 java-stream

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