我正在从 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)是否应该自动执行此操作?
我正在尝试使用 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) 我尝试向我的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 服务。我有一个运行良好的 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) 我已经安装了Eclipse Mars2,当我尝试保存更改时,我收到一条消息说“正在处理 JAX-RS 更改...(等待) ”并且 Eclipse 冻结了几分钟。我正在使用 jboss 作为服务器开发一个基于spring-mvc maven 的应用程序(我不知道这是否相关)。
在这个答案中,得到了一个 nullPointer,但我看不到任何错误。我在我的项目中也找不到“ jax-rs-support ”选项。
有什么线索吗?
非常感谢!
我的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转换与此列表一起使用?其他变量一切正常.
我有一个被调用的类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,因为我不希望第三方工具在我的项目中.
我在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并将其部署到根上下文中吗?
自从刚开始使用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) 我有一个使用Jersey 2.x的简单REST API项目.我尝试使用Google Guice来注入我的依赖项,但它似乎不起作用.我收到此错误:
org.glassfish.hk2.api.UnsatisfiedDependencyException:SystemInjecteeImpl没有可用于注入的对象(requiredType = 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)