相关疑难解决方法(0)

日期格式映射到JSON Jackson

我有一个来自API的日期格式,如下所示:

"start_time": "2015-10-1 3:00 PM GMT+1:00"
Run Code Online (Sandbox Code Playgroud)

这是YYYY-DD-MM HH:MM am/pm GMT时间戳.我将此值映射到POJO中的Date变量.显然,它显示转换错误.

我想知道两件事:

  1. 我需要使用什么格式来与杰克逊进行转换?Date是一个很好的字段类型吗?
  2. 通常,有没有办法在变量被Jackson映射到Object成员之前处理变量?比如,更改格式,计算等.

java json date pojo jackson

133
推荐指数
6
解决办法
35万
查看次数

如何在内存单元测试Spring-Jersey

我正在使用Spring-Jersey3,并且无法弄清楚如何使用Spring bean对RESTFul API进行单元测试

调节器

package com.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.service.DataSource;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("test")
@Component
public class SpringController {
    @Autowired
    private DataSource datasource;

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getHello() {
        return new String(datasource.load());
    }
}
Run Code Online (Sandbox Code Playgroud)

服务接口

package com.service;

public interface DataSource {
    public String load();
}
Run Code Online (Sandbox Code Playgroud)

服务实施

package com.service;

import org.springframework.stereotype.Repository;

@Repository
public class DataSourceImpl implements DataSource {

    @Override
    public String load() {
        return "Hello";
    }
}
Run Code Online (Sandbox Code Playgroud)

ResourceRegister.java(泽西资源注册)

package com.component;

import org.glassfish.jersey.server.ResourceConfig;
import com.controller.SpringController; …
Run Code Online (Sandbox Code Playgroud)

junit spring unit-testing jersey jersey-2.0

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

阅读jersey的ParamConverter中的另一个参数

当给定一个格式化为Instant的原生ISO-8601的字符串时,或者作为自纪元以来的整数毫秒,我ParamConverter提供了一个Instant(Date).这工作正常,但我还需要能够支持其他日期格式(客户很挑剔).

为了避免经典dd/mm/yyyymm/dd/yyyy歧义,我希望客户指定他们的首选格式作为请求*的一部分.例如:

GET http://api.example.com/filter?since=01/02/2000&dateformat=dd/mm/yyyy
Run Code Online (Sandbox Code Playgroud)

传递给一个看起来像这样的方法:

@GET
String getFilteredList( final @QueryParam( "since" ) Instant since ) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

(为清楚起见省略了时间和时区部分)

所以我希望我ParamConverter<Instant>能够读取dateformat参数.

我已经能够使用设置ContainerRequestContext属性的过滤器和AbstractValueFactoryProvider类似的东西的组合,但是需要参数来应用自定义注释,并且不允许它与QueryParam/FormParam /等一起使用.它没那么有用了.

有没有办法从ParamConverter中获取其他参数或请求对象本身?

[*]在现实世界中,这将来自一系列预先批准的格式,但现在只是假设他们正在提供输入 DateTimeFormatter


为清楚起见,这是我的代码:

public class InstantParameterProvider implements ParamConverterProvider {
    private static final ParamConverter<Instant> INSTANT_CONVERTER =
            new ParamConverter<Instant>( ) {
                @Override public final T fromString( final String value ) {
                    // This is where I would like to get the other parameter's …
Run Code Online (Sandbox Code Playgroud)

java jax-rs jersey jersey-2.0

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

标签 统计

java ×2

jersey ×2

jersey-2.0 ×2

date ×1

jackson ×1

jax-rs ×1

json ×1

junit ×1

pojo ×1

spring ×1

unit-testing ×1