标签: jax-rs

JAX-RS是否适合作为MVC框架?

JAX-RS有一些MVC支持,但我想知道JAX-RS是否真的是构建供人类使用的Web应用程序的不错选择.

如果用户在表单中输入错误或不完整的信息,则应该像Grails或Wicket一样再次显示.使用JAX-RS有一种舒适的方式吗?

据我所知,URI映射无法正常工作,如果没有给出所有必需的参数或存在类型转换问题(例如,使用Date).那是对的吗?

是否支持国际化模板?

以下是基于JAX-RS的简单GUI应用程序示例.但它非常简单,像i18n这样的东西并没有讨论验证.

java model-view-controller jax-rs web-frameworks java-ee

15
推荐指数
2
解决办法
4171
查看次数

如何在RESTEasy客户端框架中设置HTTP标头?

RESTEasy(一个JAX-RS实现)有一个很好的客户端框架,例如:

RegisterBuiltin.register(ResteasyProviderFactory.getInstance());

SimpleClient client = ProxyFactory.create(SimpleClient.class, "http://localhost:8081");
client.putBasic("hello world");
Run Code Online (Sandbox Code Playgroud)

你如何设置HTTP标头?

澄清:

jkeeler提出的解决方案是一个很好的方法,但我想在ProxyFactory级别设置HTTP标头,我不想将标头传递给客户端对象.有任何想法吗?

java jax-rs resteasy http-headers

15
推荐指数
4
解决办法
4万
查看次数

在异常映射器中检索请求主体

我正在尝试在JAX-RS ExceptionMapper中检索请求的主体.到目前为止,这是我的代码:

@Provider @Componenet
public class BaseExceptionMapper implements ExceptionMapper<Exception> {

    @Context private HttpServletRequest request;

    @Override
    public Response toResponse(Exception ex) {

        // Trying to retrieve request body for logging throws an error
        String requestBody = IOUtils.toString(request.getInputStream());

    }

}
Run Code Online (Sandbox Code Playgroud)

所以我的困境是我无法获取日志记录的请求体,因为servlet API不允许你多次为请求调用request.getInputStream()/ request.getReader()(并且JAX-RS显然是在调用它解析请求).有谁知道是否有办法做我想做的事情?

java servlets jax-rs jersey

15
推荐指数
2
解决办法
8388
查看次数

映射,绑定和解析之间有什么区别?

我开始在java EE6中学习Web服务.

我之前做过Web开发,但从来没有与Web服务有任何关系.

对我来说一切都是新的,我在网上找到的书籍和教程都是技术性的.

我开始学习.xsd架构和.xml.

在那个主题中我感到自信,我理解用于什么模式和验证意味着什么.

现在我的下一步是学习JAX-B(用于XML绑定的Java Api).我骑了一些关于它,我也在我的IDE中做了一些练习.但是我有很多基本的疑虑,这让我陷入困境,无法继续下一个话题.

如果有人能够很好地解释我的怀疑,我会感激不尽:

  1. 它是什么意思映射和什么是映射工具?
  2. 什么是绑定和什么是绑定工具?
  3. 解析什么是解析工具?
  4. JAX-B如何与映射,绑定和解析相关?

我正在寻找一个由你建立的好答案,而不仅仅是谷歌的复制粘贴(我已经在网上几个小时而且只是感到困惑).

java web-services jax-rs jaxb java-ee-6

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

JAX-RS:如何保护REST端点?

我正在使用JBoss ASJAX-RS创建REST端点.

让我们说我的课看起来像

@Path("/users")
public class UserResource {


  @GET
  public Response getAccount() {
    return "hello";
  }
}
Run Code Online (Sandbox Code Playgroud)

现在getAccount还没有经过身份验证

想要
- 我想添加身份验证,以便在代码命中时getAccount对用户进行身份验证
- 我希望身份验证由注释而不是XML配置驱动,如果可能的话
- 我想进行数据库比较以查看是否用户有效

问题
- 我从来没有这样做过,所以我不知道如何实现它
- 我已经搜索了很多东西并找到了泽西的例子

更新
- 我想为每个请求发送身份验证凭据,而不是创建任何会话

请用一个简单的工作示例指导我,我会尝试从那里扩展

java authentication rest jboss jax-rs

15
推荐指数
2
解决办法
2万
查看次数

使用不同的@QueryParams重载路径函数

我想为同一个GET路径提供多个功能.

当且仅当查询参数与URL字符串中的参数匹配时,我希望我的Web服务"找到"这些函数.

例如:

我有 Path("/myGET")

对于那条路,我想有两个功能:

@GET  
@Produces(MediaType.APPLICATION_JSON)
@TypeHint(TagSets.class)
public Response getTagSets(@QueryParam("entityId") Integer entityId)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

@GET  
@Produces(MediaType.APPLICATION_JSON)
@TypeHint(TagSets.class)
public Response getTagSets(){
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在我收到一个错误:

严重:已使用资源和/或提供程序类检测到以下错误和警告:严重:生成媒体类型冲突.资源方法public javax.ws.rs.core.Response <...>.getTagSets(java.lang.Integer)和public javax.ws.rs.core.Response <...>.getTagSets(java.lang. Integer,java.lang.Integer)可以生成相同的媒体类型SEVERE:生成媒体类型冲突.资源方法public javax.ws.rs.core.Response <...>.getTagSets()和public javax.ws.rs.core.Response <...>.getTagSets(java.lang.Integer,java.lang .Integer)可以生成相同的媒体类型

首先:有没有办法实现我想做的事情..

第二:如果这是可用的,当且仅当查询参数与函数中请求的内容完全匹配时,是否有任何方式可以找到路径?例如,如果将调用相同的路径@QueryParam("differentParam"),它将不会到达任何2个函数.

第三:如果泽西没有办法做到这一点,有没有办法与其他框架工作一起做?

重要提示:回答这个问题的人认为我正在寻找一种解决方案而不是解决方案.今天我正在使用1个函数并检查参数并调用我需要的东西(这是我在发布问题之前使用的).但我正在寻找的可能是使用框架的力量来拯救我的麻烦

谢谢.

rest spring jax-rs spring-mvc jersey

15
推荐指数
2
解决办法
7665
查看次数

Spring Restfull Jax-RS注释支持

我有以下class和web.xml文件.春天在什么框架支持JAX-RS注解,例如@PATH,和@PUT,@Consumes...等.

换句话说,我可以用@PATH而不是@RequestMapping

Java的:

import org.springframework.stereotype.Controller;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;

@Controller
@Path("/register")
public class RegisterServices {
    @PUT
    @Path("/create")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces({"application/json"})
    public Response create(@Context HttpServletRequest requestContex,
                           @HeaderParam("Authorization") String authorization, 
                           String xMsisdn, String param) {}
}
Run Code Online (Sandbox Code Playgroud)

web.xml中

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <servlet-mapping>
        <servlet-name>Jersey REST Service</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>Jersey REST Service</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
Run Code Online (Sandbox Code Playgroud)

java rest spring jax-rs

15
推荐指数
2
解决办法
2万
查看次数

如何在JSF框架中实现JAX-RS RESTful服务

在我的实验室中,我被要求使用JSF框架创建一个简单的网站,并使用REST.我对这两个做了一些研究.事实证明,对于REST,我必须使用泽西的JAX-RS框架.我想知道如何整合这两个框架,JAX-RS和JSF?

我已经web.xml为JSF提供了以下servlet :

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/test/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

对于Jersey,我认为我必须使用以下servlet web.xml:

<servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.jbm.rest</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/api/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

现在我担心的是,对我而言,这个Jersey servlet似乎将取代Faces servlet web.xml.这会将我的应用程序从JSF更改为JAX-RS.但我想保留JSF并使用JAX-RS.我怎样才能做到这一点?

jsf servlets jax-rs jersey

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

Eclipse JAX-RS(REST Web服务)2.0需要Java 1.6或更高版本

我是Web服务的新手,我正在尝试使用jax-rs rest和spring在Eclipse中进行项目.我使用java 1.8,但eclipse向我显示一个错误,jax-rs 2.0需要java 1.6或更新的错误,我的项目将无法正常工作

这是项目资源管理器和错误的屏幕截图.我试图谷歌它但不能得到任何英语解决方案

Eclipse截图

编辑:如果我试图显示它,看起来截图的质量很低,所以这里是截图的imgur链接,以获得更好的质量 http://i.imgur.com/YYyoeUX.png

eclipse spring web-services jax-rs

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

使用Response参数的方法中的IllegalStateException

我写了一个简单的类来测试响应读取实体方法(如果它按预期工作).但它没有奏效.

当我启动课程时,我收到以下错误response.readEntity():

Exception in thread "main" java.lang.IllegalStateException: Method not supported on an outbound message.  
  at org.glassfish.jersey.message.internal.OutboundJaxrsResponse.readEntity(OutboundJaxrsResponse.java:150)
Run Code Online (Sandbox Code Playgroud)

这是我写的代码

public static void main(String[] args) {
        List<Entity> representations = new ArrayList<>();
        representations.add(new Entity("foo", "baz", false));
        representations.add(new Entity("foo1", "baz1", true));
        representations.add(new Entity("foo2", "baz2", false));
        Response build = Response.ok(representations).build();
        printEntitesFromResponse(build);
    }

public static void printEntitesFromResponse(Response response) {
        response
                .readEntity(new GenericType<List<Entity>>() {})
                .stream()
                .forEach(entity -> System.out.println(entity));
    }
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

java jax-rs dropwizard

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