小编Rey*_*ldo的帖子

如何在Spring MVC中使用Jackson和Jersey 2 Client对Joda DateTime进行反序列化?

我一直在用这个概念证明来抨击我的头脑.我想使用一个REST端点,该端点返回带有ISO8601 UTC时间戳的JSON有效负载:

{  ...
  "timestamp" : "2014-08-20T11:51:31.233Z" 
}
Run Code Online (Sandbox Code Playgroud)

我想使用命令行Java客户端使用Jackson/Spring Boot编写的Jersey 2客户端来使用它.编组POJO定义如下:

@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(Include.NON_NULL)
public class GreetingResource
{
  @JsonProperty("timestamp")
  private DateTime date;

  ...
}
Run Code Online (Sandbox Code Playgroud)

遵循以下建议:

https://jersey.java.net/documentation/latest/user-guide.html#json.jackson

并使用以下Gradle依赖项:

dependencies {
    compile("org.springframework.boot:spring-boot-starter")
    compile("org.springframework.boot:spring-boot-starter-logging")
    compile("joda-time:joda-time")
    compile("com.fasterxml.jackson.core:jackson-core")
    compile("com.fasterxml.jackson.core:jackson-annotations")
    compile("com.fasterxml.jackson.core:jackson-databind")
    compile("com.fasterxml.jackson.datatype:jackson-datatype-joda")
    compile("com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.3.3")
    compile("org.apache.commons:commons-lang3:3.3.2")
    compile("org.glassfish.jersey.core:jersey-client:2.2")
    compile("org.glassfish.jersey.media:jersey-media-json-jackson:2.2")
    testCompile("org.springframework.boot:spring-boot-starter-test")
}
Run Code Online (Sandbox Code Playgroud)

我总是得到这个错误:

Exception in thread "main" javax.ws.rs.ProcessingException: Error reading entity from input stream.
  at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:849)
  at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:768)
  at org.glassfish.jersey.client.InboundJaxrsResponse.readEntity(InboundJaxrsResponse.java:96)
  at org.glassfish.jersey.client.ScopedJaxrsResponse.access$001(ScopedJaxrsResponse.java:56)
  at org.glassfish.jersey.client.ScopedJaxrsResponse$1.call(ScopedJaxrsResponse.java:77)
  at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
  at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
  at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
  at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:397)
  at org.glassfish.jersey.client.ScopedJaxrsResponse.readEntity(ScopedJaxrsResponse.java:74)
  at client.GreetingClient.processResponse(GreetingClient.java:62)
  at client.GreetingClient.performGet(GreetingClient.java:53)
  at …
Run Code Online (Sandbox Code Playgroud)

spring-mvc jersey jodatime jackson spring-boot

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

使用 RemoteFileTemplate 时,为什么会在日志中收到意外的 RuntimeException 警告?

我正在使用 Spring-integration 4.1.1.RELEASE 并且有将消息有效负载中的文件上传到远程 sFtp 共享的代码。我正在使用像这样初始化的 sFtpRemoteFileTemplate:

Expression remoteDirectoryExpression = new  LiteralExpression("si.sftp.sample");
SpelExpressionParser parser = new SpelExpressionParser();
Expression fileNameExpression = parser.parseExpression("payload.name");

template = new SftpRemoteFileTemplate(sessionFactory);
template.setCharset("UTF-8");
template.setBeanFactory(beanFactory);
template.setAutoCreateDirectory(true);
template.setRemoteDirectoryExpression(remoteDirectoryExpression);
template.setFileNameExpression(fileNameExpression);
template.setTemporaryFileSuffix(".writing");
template.setUseTemporaryFileName(true);
Run Code Online (Sandbox Code Playgroud)

但是,在运行代码时,此警告出现在我的日志文件中 - 对于模板中的每个表达式一次:

WARN   - o.s.i.e.ExpressionUtils: Creating EvaluationContext with no beanFactory
java.lang.RuntimeException: No beanfactory
at org.springframework.integration.expression.ExpressionUtils.createStandardEvaluationContext(ExpressionUtils.java:79) [spring-integration-core-4.1.1.RELEASE.jar:na]
at org.springframework.integration.util.AbstractExpressionEvaluator.getEvaluationContext(AbstractExpressionEvaluator.java:114) [spring-integration-core-4.1.1.RELEASE.jar:na]
at org.springframework.integration.util.AbstractExpressionEvaluator.getEvaluationContext(AbstractExpressionEvaluator.java:100) [spring-integration-core-4.1.1.RELEASE.jar:na]
at org.springframework.integration.util.AbstractExpressionEvaluator.evaluateExpression(AbstractExpressionEvaluator.java:164) [spring-integration-core-4.1.1.RELEASE.jar:na]
at org.springframework.integration.util.AbstractExpressionEvaluator.evaluateExpression(AbstractExpressionEvaluator.java:123) [spring-integration-core-4.1.1.RELEASE.jar:na]
at org.springframework.integration.handler.ExpressionEvaluatingMessageProcessor.processMessage(ExpressionEvaluatingMessageProcessor.java:72) [spring-integration-core-4.1.1.RELEASE.jar:na]
Run Code Online (Sandbox Code Playgroud)

这是为什么?我还没有设法摆脱它,我怀疑 Bean Factory 实例没有委托给 RemoteFileTemplate 中的 ExpressionEvaluatingMessageProcessor(调用类已经实现了 BeanFactoryAware 并且我已经验证了 beanFactory 字段是否正确填充)。我已经为它创建了一个测试用例,在那里我设法重现了它。

@Test
public void shouldUploadFile() throws …
Run Code Online (Sandbox Code Playgroud)

java messaging spring sftp spring-integration

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