小编Ole*_*_DJ的帖子

java.net.HttpRetryException:在流模式下无法由于服务器身份验证而重试

我们的应用程序中有两个部分:
服务器 - 提供REST服务
客户端 - 通过Spring restTemplate使用它们

除了HTTP状态之外,我们的服务器还返回一个带有JSON的HTTP主体,它详细描述了错误.所以,我已经为restTemplate添加了自定义错误处理程序来处理一些编码为非错误的错误 - 它有助于解析HTTP正文.

但是,在HTTP/1.1 401 Unauthorized的情况下,我通过解析HTTP正文获得异常.所有其他错误代码都处理得很好(400,402等)我们正在使用普通服务器逻辑,在发生错误时发送HTTP响应,对于不同类型的错误没有特殊规则:

writeErrorToResponse(int status, String errMsg, HttpServletResponse resp) throws IOException {
        response.setStatus(status);
        response.setContentType(MediaType.APPLICATION_JSON_VALUE);
        String message = String.format("{\"error\":\"%s\"}", StringUtils.escapeJson(errMsg));
        resp.getWriter().println(message);
    }
Run Code Online (Sandbox Code Playgroud)

但在客户端只有HTTP/1.1 401抛出异常 - "java.net.HttpRetryException: cannot retry due to server authentication, in streaming mode"

我做了一些调试,发现问题的原因是SimpleClientHttpResponse中的代码:

HttpURLConnection.getInputStream()

使用Fiddler进行跟踪会有以下响应:在客户端上解析消息是正确的:

HTTP/1.1 402 Payment Required
X-Powered-By: Servlet/3.0
Content-Type: application/json
Content-Language: en-GB
Content-Length: 55
Connection: Close
Date: Sat, 25 May 2013 10:10:44 GMT
Server: WebSphere Application Server/8.0

{"error":"I cant find that user.  Please try …
Run Code Online (Sandbox Code Playgroud)

java servlets http

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

Spring Data返回List <BigInteger>而不是List <Long>

我有关于spring-data的DAO实现:

public interface TestDataRepository extends CrudRepository<DpConfigData, Long> {
@Query(value = "select distinct(oid) from unit", nativeQuery = true)
    List<Long> testMethod();
}
Run Code Online (Sandbox Code Playgroud)

和单元测试来测试被管理的DAO:

@Test
public void test(){
    List<Long> testData = dpConfigDataEntityDataRepository.testMethod();
    for (Long oid:testData){
        System.out.print(oid);
    }
}
Run Code Online (Sandbox Code Playgroud)

运行测试会产生奇怪的结果 - List<Long> testData在运行时由BigInteger实例填充,而不是由Long填充.结果我得到ClassCastException:java.math.BigInteger无法强制转换为java.lang.Long

JPA实现 - Hibernate.作为DB我使用PostgreSQL,unit.oid字段在DB层上有BigInt类型.在获取整个单元的情况下它被映射到Long,但是使用自定义查询作为"select distinct ..."时出现了错误并且它被映射到BigInteger.

所以,我的问题是:这种奇怪行为的原因是什么?如何以优雅的方式解决/解决它?

postgresql hibernate-mapping spring-data-jpa

15
推荐指数
2
解决办法
5724
查看次数

如何首先加载位于Java EE app libs中的类,而不是Java EE App Container提供的类

我们将在开发中使用WebSphere 8.0 app服务器.
我们的Web应用程序使用Amazon aws java sdk,它依次使用Apache http-client 4.1.
但是WebSphere的库中也有http-client类,它们似乎与我们的web-app中的http-client冲突.
我找到了随WebSphere一起分发的下一个http-client类列表:

\ WebSphere\AppServer\plugins\com.ibm.ws.prereq.jaxrs.jar(http-client 4.0.1)
\WebSphere\AppServer\runtimes\com.ibm.jaxrs.thinclient_8.0.0.jar

所以,我的问题是:如何首先加载位于我的应用程序中的类而不是WebSphere app容器提供的类?

websphere java-ee websphere-8

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

编写指向其实现者的通用接口的便捷方式

java中是否有一种编写通用接口的方法,以更方便的方式指出这种接口的实现者?

例如我写的界面:

public interface Updatable<T> {
    void updateData(T t);
}
Run Code Online (Sandbox Code Playgroud)

我想指出只有实现者的实例可以在updateData(T t)方法中传递.

所以,我必须写这样的东西:

public class Office implements Updatable<Office> {

@Override
    public void updateData(Office office) {
        //To change body of implemented methods use File | Settings | File Templates.
    }
...
...
...
}
Run Code Online (Sandbox Code Playgroud)

但似乎有点难看.你有更好的变种吗?

java generics

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