标签: jax-rs

如何在 JAX-RS REST 服务响应后清理临时文件?

我正在从 JAX-RS REST 服务返回一个临时文件,如下所示:

@GET
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response getFile() {
  File file = ... // create a temporary file
  return Response.ok(file, MediaType.APPLICATION_OCTET_STREAM)
      .header("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"" ) //optional
      .build();
}
Run Code Online (Sandbox Code Playgroud)

处理响应后删除此临时文件的正确方法是什么?JAX-RS 实现(如 Jersey)是否应该自动执行此操作?

java rest jax-rs jersey

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

使用 Spring Boot 的异步服务

我正在尝试使用 springboot 运行基本的异步服务。
调用请求时出现异常。不知道为什么会这样,我使用了 oracle 网站和 jersey 网站上的所有说明和代码片段。我这里有什么遗漏吗?如果您需要更多信息,请询问我,我会相应地更新问题。谢谢你。

org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.ws.rs.container.AsyncResponse]: Specified class is an interface
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:101)
at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.createAttribute(ModelAttributeMethodProcessor.java:137)
at org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor.createAttribute(ServletModelAttributeMethodProcessor.java:80)
at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:106)
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:78)
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:162)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:129)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:775)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:858)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) …
Run Code Online (Sandbox Code Playgroud)

java jax-rs sendasynchronousrequest jersey-2.0 spring-boot

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

使用 Apache CXF 3 和 JAX-RS 2.0 添加客户端代理

我尝试向我的Apache CXF 3客户端 API添加代理。

ClientBuilder.newClient().target(serverUri)
                         .request()
                         .post();
Run Code Online (Sandbox Code Playgroud)

在 Jersey 实现中,我使用 ClientConfig :

ClientConfig config = new ClientConfig();
config.connectorProvider(new ApacheConnectorProvider());
config.property(ClientProperties.PROXY_URI, proxyAddress);
ClientBuilder.newClient(config) ...
Run Code Online (Sandbox Code Playgroud)

我想用 CXF 3 做同样的事情而不使用他们的特定客户端(我使用 JAX-RS 客户端实现)并且不在 JVM 上设置代理。

任何帮助都将得到回报 ;)

编辑 :

解决方案的开始可以是:

client.property("http.proxy.server.uri", proxyUri); 
client.property("http.proxy.server.port",proxyPort); 
Run Code Online (Sandbox Code Playgroud)

但我没有找到代理身份验证的属性。

java rest proxy cxf jax-rs

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

Java Rest Service POST 不同意 InnerClasses 属性

我有一个用 Java 编写的 REST 服务。我有一个运行良好的 GET 方法,现在我想实现 POST 方法。

@POST
@Consumes(MediaType.APPLICATION_JSON)
public void post(String ext){
    System.out.println("In the POST method");
    System.out.println(ext);
} 
Run Code Online (Sandbox Code Playgroud)

另外,我有一个 CORS 过滤器,因为我在 localhost 上工作并在 localhost 上发送内容。

Provider
public class CORSFilter implements ContainerResponseFilter {

@Override
public void filter(final ContainerRequestContext requestContext,
                  final ContainerResponseContext cres) throws IOException {
  cres.getHeaders().add("Access-Control-Allow-Origin", "*");
  cres.getHeaders().add("Access-Control-Allow-Headers", "origin, content-type, accept, authorization");
  cres.getHeaders().add("Access-Control-Allow-Credentials", "true");
  cres.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
  cres.getHeaders().add("Access-Control-Max-Age", "1209600");
} 
}
Run Code Online (Sandbox Code Playgroud)

一旦我在 POST 方法中添加一个参数,我就会收到以下错误:

WARNING: HK2 service reification failed for [com.movierestservice.resources.MoviesResource$CORSFilter] with an exception: …
Run Code Online (Sandbox Code Playgroud)

java rest post jax-rs cors

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

Eclipse - 卡住“处理 jax-rs 更改”

我已经安装了Eclipse Mars2,当我尝试保存更改时,我收到一条消息说“正在处理 JAX-RS 更改...(等待) ”并且 Eclipse 冻结了几分钟。我正在使用 jboss 作为服务器开发一个基于spring-mvc maven 的应用程序(我不知道这是否相关)。

在这个答案中,得到了一个 nullPointer,但我看不到任何错误。我在我的项目中也找不到“ jax-rs-support ”选项。

有什么线索吗?

非常感谢!

java eclipse jax-rs

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

Java API - 将<int []>列出为JSON错误

我的REST API应该返回一个对象列表

public List<MyObject> getMyObjects() { ... }
Run Code Online (Sandbox Code Playgroud)

为MyObject

public class MyObject {

    private int id;
    private String name;
    private List<int[]> coordinates;

    // getters
    // setters
}
Run Code Online (Sandbox Code Playgroud)

对此方法的调用有效,并且没有错误.

问题是关于坐标列表.生成JSON时,我的int []列表被转换为此

"coordinates":["[I@409cd27c","[I@1a552b8c","[I@1af3f13d","[I@5e12856b","[I@78bba3e7", //...
Run Code Online (Sandbox Code Playgroud)

如何使JSON转换与此列表一起使用?其他变量一切正常.

java rest json jax-rs

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

JSON:JsonString的对象 - JsonString到X.class对象

我有一个被调用的类MediaList,我想用JSON-String和向后解析这个类的值.

public class KeywordList {
       private List<Keyword> keywords = new ArrayList<>();
}
Run Code Online (Sandbox Code Playgroud)

这里是JSON-String:

{
    "keywords": [
        {
            "id": 12,
            "name": "Thesis",
            "mediaCount": 31
        }, ...
    ]
}
Run Code Online (Sandbox Code Playgroud)

我正在使用谷歌lib gson,但我只是想使用标准的java版本与jax-rs,因为我不希望第三方工具在我的项目中.

java json jax-rs java-ee-7

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

Spring Boot Apache CXF JAX-RS服务上下文路径/基本URI

我在Spring Boot中配置我的JAXRS服务器,如下所示:

    JAXRSServerFactoryBean factoryBean = new JAXRSServerFactoryBean();
    factoryBean.setBus(this.bus);
    factoryBean.setFeatures(singletonList(swagger2Feature()));
    factoryBean.setServiceBeans(Arrays.asList(blah(), blah2(), blah3()));
    factoryBean.setAddress("/api/v1/"); // HERE

    List<Object> providers = new ArrayList<>();
    providers.add(new JacksonJaxbJsonProvider());
    factoryBean.setProviders(providers);

    BindingFactoryManager manager = factoryBean.getBus().getExtension(BindingFactoryManager.class);
    JAXRSBindingFactory restFactory = new JAXRSBindingFactory();
    restFactory.setBus(factoryBean.getBus());
    manager.registerBindingFactory(JAXRSBindingFactory.JAXRS_BINDING_ID, restFactory);

    return factoryBean.create();
Run Code Online (Sandbox Code Playgroud)

但是,URL总是要求/services在最前面,这很麻烦(但不是世界末日)。有什么方法可以删除/services并将其部署到根上下文中吗?

cxf jax-rs spring-boot

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

方法级别而非类级别的基本Jax-RS PATH配置

自从刚开始使用JAX-RS以来,我有一个问题无法解决很长时间。我们可以指定方法而不是类的路径。我正在尝试运行它,但是它不起作用。

@Path("/images")
@Component
@Transactional
public class ImageResource {


    @GET
    public List<Image> getAll(){
        return this.imageDao.findAll();
    }
}
Run Code Online (Sandbox Code Playgroud)

是否可能有这样的事情:

@Component
@Transactional
public class ImageResource {

    @GET
    @Path("/images")
    public List<Image> getAll(){
        return this.imageDao.findAll();
    }
}
Run Code Online (Sandbox Code Playgroud)

java url spring jax-rs spring-boot

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

Java Guice DI错误:UnsatisfiedDependencyException:SystemInjecteeImpl中没有可用于注入的对象

我有一个使用Jersey 2.x的简单REST API项目.我尝试使用Google Guice来注入我的依赖项,但它似乎不起作用.我收到此错误:

org.glassfish.hk2.api.UnsatisfiedDependencyException:SystemInjecteeImpl没有可用于注入的对象(r​​equiredType = AccountService,parent = AccountsResource,qualifiers = {},position = 0,optional = false,self = false,unqualified = null,1658198405 )

我有这个简单的资源类

@Path("/accounts")
@Produces(MediaType.APPLICATION_JSON)

public class AccountsResource {

    private final AccountService accountService;

    @Inject
    public AccountsResource(AccountService accountService) {
        this.accountService = accountService;
    }

  @GET
  @Path("test")
  public String test() {
    return this.accountService.test();
  }
Run Code Online (Sandbox Code Playgroud)

我想将此服务注入我的资源类

public class AccountService {

    public AccountService() {}

    public String test() {
        return "test";
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,按照Guice的指南,我创建了这个模块类

import com.google.inject.*;

public class AccountsResourceModule extends AbstractModule  {

@Override
protected void configure() {
    bind(AccountService.class); …
Run Code Online (Sandbox Code Playgroud)

java dependency-injection jax-rs jersey guice

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