Tag: jersey 2.0

泽西HK2依赖注射

我正在编写一个公开REST API的简单微服务。 所以我开始与泽西岛合作,当然我需要将我的对象注入jersey资源。 基本上我有2个类定义了一组资源,其中一些需要使用另一个服务。 基本上我有: public interface MyService { String getServiceName(); void doService(); } 此接口的2个实现(MyServiceBean和MyAlternativeServiceBean) 而且,据我所知阅读jersey文件,我定义了一个hk2 Binder: public class MyBinder implements Binder{ @Override public void bind(DynamicConfiguration config) { DescriptorImpl descriptor = BuilderHelper.link(MyServiceBean.class).named(“MyServiceBean”).to(MyService.class).build(); config.bind(descriptor); config.bind(BuilderHelper.link(MyAlternativeServiceBean.class).named(“MyAlternativeServiceBean”).to(MyService.class).build()); } 我将此绑定程序注册到ApplicationConfig类 public class ApplicationConfig extends ResourceConfig{ public ApplicationConfig(){ property(“property.value”, “MyAlternativeServiceImplementation”); registerInstances(new MyBinder()); } } 并正确注释到资源中 @Path(“first”) public class First { […]

在泽西岛获得rest服务

我对Web服务非常陌生。 我已经使用Jersey 2与Spring集成了一些REST服务。 现在我需要使用用户名/密码进行身份validation来保护这些rest服务。 我被告知不要使用Spring安全性。 我不知道该怎么做。 我在网上搜索,但各种链接显示各种实现,我无法决定如何继续它。 我知道这是一个模糊的问题但请在这方面提供帮助。

java Jersey 2.1客户端线程安全吗?

针对jersey 2.0的文档说 : 客户端实例是昂贵的资源。 建议重新使用已配置的实例来创建Web资源。 Web资源的创建,请求的构建和响应的接收都保证是线程安全的。 因此,可以在多个线程之间共享Client实例和WebResource实例 客户端在2.1版中仍然是线程安全的吗? 我在2.1的文档中找不到有关线程安全的信息。

在找不到REST资源时返回404是否正确?

假设我有一个简单的Jersey REST资源,如下所示: @Path(“/foos”) public class MyRestlet extends BaseRestlet { @GET @Path(“/{fooId}”) @Produces(MediaType.APPLICATION_XML) public Response getFoo(@PathParam(“fooId”) final String fooId) throws IOException, ParseException { final Foo foo = fooService.getFoo(fooId); if (foo != null) { return Response.status(Response.Status.OK).entity(foo).build(); } else { return Response.status(Response.Status.NOT_FOUND).build(); } } } 基于上面的代码,返回NOT_FOUND状态( 404 )是否正确,或者我应该返回204 ,还是其他一些更合适的代码? 提前谢谢了!

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

我已经制作了一个ParamConverter ,当给定一个格式化为Instant的原生ISO-8601的字符串时,它提供一个Instant (Date),或者作为epoch以来的整数毫秒。 这工作正常,但我还需要能够支持其他日期格式(客户很挑剔)。 为了避免经典的dd/mm/yyyy与mm/dd/yyyy歧义,我想让客户指定他们的首选格式作为请求的一部分*。 例如: GET http://api.example.com/filter?since=01/02/2000&dateformat=dd/mm/yyyy 传递给一个看起来像这样的方法: @GET String getFilteredList( final @QueryParam( “since” ) Instant since ) { … } (为清楚起见省略了时间和时区部分) 所以我希望我的ParamConverter能够读取dateformat参数。 我已经能够使用设置ContainerRequestContext属性的filter和AbstractValueFactoryProvider的组合来做类似的事情,但是这需要参数来应用自定义注释,并且不允许它与QueryParam / FormParam / etc一起使用。 ,使它远没那么有用。 有没有办法从ParamConverter中获取其他参数或请求对象本身? [*]在现实世界中,这将来自一系列预先批准的格式,但现在只是假设它们为DateTimeFormatter提供输入 为清楚起见,这是我的代码: public class InstantParameterProvider implements ParamConverterProvider { private static final ParamConverter INSTANT_CONVERTER = new ParamConverter( ) { @Override public final T fromString( final […]

如何使用JAXB将属性对象转换为JSON对象

我想接受并响应REST应用程序中的JSON对象。 我需要发送和接收的数据位于.properties文件中。 我已经阅读过它们,现在它们属于一个Properties对象(来自java.util.Properties )。 有没有一种方法可以编组和解组Properties对象,而无需实现新类? 我在Weblogic服务器中使用Jax-rs API。 @POST @Path(“{id}”) @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public JSONObject getbyID(@PathParam(“id”)JSONObject inputJsonObj) { //marshalling and unmarshalling goes here }

如何使用javax.ws.rs.client.WebTarget从REST客户端发送json对象

我在下面给出了一个POJO,我希望将其作为JSON或XML输出到服务器。 这就是我所做的 客户: ClientConfig config = new ClientConfig(); Client client = ClientBuilder.newClient(config); WebTarget target = client.target(getBaseURI()); public void putFriend(String uri , Friend friend) { System.out.println(friend.toString()); target = target.path(some_path).path(uri); ClientResponse response = target.request(MediaType.APPLICATION_JSON).put(Entity.entity(friend,MediaType.APPLICATION_JSON),ClientResponse.class); } 我在网上找到的例子是使用WebResource。 我不知道如何使用WebTarget。 我所做的是从SO上找到的一些例子中获取,但Entity.entity()给出了未定义的方法实体(friend,String)。 POJO @XmlRootElement public class Friend{ private String friendURI; private String event; private String uri; String getUri() { return uri; […]

Jersey RESTful Web服务gradle设置

我坚持使用jersey库为RESTful Web服务创建一个gradle项目。 项目配置应该能够在jetty应用程序服务器中启动服务。 我已经找到了一个资源: https : //github.com/ziroby/jetty-gradle-hello-world 我的解决方案的问题是,它使用了过时的jersey版本。 我至少需要2版(最新的2.14版)。 我试图在maven central上搜索新版本,但在版本2中,很多工件名称发生了变化,我无法正确配置它。 编辑:我的项目中并不特别需要Jetty服务器。 它可以是任何应用程序服务器,适用于测试和调试我的应用程序。 我也在生产中使用docker,所以使用docker会很不错。 编辑 :(通过peeskillet) – 链接代码 建立 apply plugin: ‘java’ apply plugin: ‘jetty’ repositories { mavenCentral() } dependencies { testCompile ‘junit:junit:4.11’ testCompile ‘org.hamcrest:hamcrest-all:1.3’ testCompile ‘com.sun.jersey:jersey-client:1.17.1’ testCompile ‘com.sun.jersey:jersey-core:1.17.1’ compile ‘com.sun.jersey:jersey-core:1.17.1’ compile ‘com.sun.jersey:jersey-server:1.17.1’ compile ‘com.sun.jersey:jersey-servlet:1.17.1’ } test { exclude ‘**/*IntegrationTest*’ } task integrationTest(type: Test) { […]

jersey 2:如何创建自定义HTTP参数绑定

我正在尝试为我的restful服务创建一个自定义的http param绑定。 请参阅下面的示例。 @POST @Path(“/user/{userId}/orders”) @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public MyResult foo(@PathParam(“userId”) String someString, @UserAuthHeaderParam String authString){ } 您可以看到函数签名中有UserAuthHeaderParam注释。 我想要做的是有一个自定义的http param绑定,而不是标准的javax.ws.rs。* Param。 我试图实现org.glassfish.hk2.api.InjectionResolver,它基本上从http头中提取值: public class ProtoInjectionResolver implements InjectionResolver{ … @Override public Object resolve(Injectee injectee, ServiceHandle root) { return “Hello World”; } … } 当我调用restful服务时,服务器会获得exception。 它表明框架无法解析函数签名中的参数: org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at Injectee(requiredType=String,parent=MyResource,qualifiers={}),position=0,optional=false,self=false,unqualified=null,2136594195), java.lang.IllegalArgumentException: While […]

如何让我的Jersey 2端点在启动时急切地初始化?

我正在从Jersey 1.x移植一些代码,我的各种运行状况检查端点的实现依赖于在启动时初始化的所有@Singleton端点资源,以便能够检测要执行的检查。 在Jersey 2.0中 – 无论我做什么,我似乎无法让我的资源端点在启动时初始化,并且它们仅在第一次访问每个端点时被构造+初始化。 我想我可以在Application类中自己初始化它们,但我宁愿使用包扫描! 有没有人知道是否有一些配置选项会告诉Jersey 2急切地初始化它在包扫描期间找到的所有资源端点? 还是一些HK2注释或技巧?