我有一个来自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变量.显然,它显示转换错误.
我想知道两件事:
我正在使用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) 当给定一个格式化为Instant的原生ISO-8601的字符串时,或者作为自纪元以来的整数毫秒,我ParamConverter提供了一个Instant(Date).这工作正常,但我还需要能够支持其他日期格式(客户很挑剔).
为了避免经典dd/mm/yyyy与mm/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)