标签: jax-rs

在基于 RESTful 的应用程序中管理状态

我们正在评估用于基于 Web 的应用程序的技术,并且一些建议与基于 RESTful 的服务方法一起使用。技术栈

1)Spring 2)Apache CXF(JAX-RS)

我的问题是

1) 如何在请求之间管理状态。例如,用户已通过身份验证,现在他正在发出一系列请求,比如浏览分页报告。我想这个网址会像

domain.com/reports/customreport/page/1 domain.com/reports/customreport/page/2 等...

a) 用户信息和请求参数存储在哪里,以便可以在请求之间共享。b) 假设结果正在流式传输,Rowset 存储在哪里?

是否有类似于 Petclinic 的完整示例应用程序,可以为此类应用程序提供最佳实践。

java rest jax-rs

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

如何在 JAX-RS 中设置响应头,以便在自定义生成的文件中正确显示中文字符

如何在 Excel 文件中正确生成支持中文字符编码的“javax.ws.rs.core.Response”(待返回)?

为了澄清,我有一个包含一些中文内容的文件(CSV excel),我需要返回一个 javax 响应,然后正确显示文档中的中文字符(在客户端)。

目前我正在做以下事情:

return Response.status( 200 )
        .header( "content-disposition", 
                 "attachment;filename=SampleCSV.csv;charset=Unicode" )
        .entity( result )
        .build();
Run Code Online (Sandbox Code Playgroud)

但是当这个响应被构建并返回到客户端时(并显示一个要求下载文件的弹出屏幕),excel文件的中文内容被狼吞虎咽。

任何建议将不胜感激。

java rest response jax-rs character-encoding

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

为什么这个简单的 JAX RS 示例不起作用?

我正在尝试使用一个简单的 JAX RS 示例,但我没有这样做。

网页.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>PLAYGROUND</display-name>
  <servlet-mapping>
    <servlet-name>playground.Rest</servlet-name>
    <url-pattern>/api/*</url-pattern>
  </servlet-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud)

REST.java

package playground;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Application;

public class Rest extends Application {
    @GET
    @Path("hello")
    public String helloworld() {
        return "Hello World!";
    }
}
Run Code Online (Sandbox Code Playgroud)

http://localhost/{warcontext}/api/hello使用浏览器 (GET)访问给我 404 错误状态

这可能是非常愚蠢的事情,但我无法弄清楚。

使用:JBoss EAP 6.1.0 (Java EE 6)

java rest jboss jax-rs jakarta-ee

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

415 尝试在 Jax-RS 球衣中发送 FormData() 时的状态

我正在尝试使用 jquery ajax 发送附加到 FormData 的文件。在参考了一些 mozilla 和 IBM 的文档后,我想出了以下内容。

阿贾克斯代码:

var sessionId = $.cookie("referenceId");
var myFormData = { sessionId: sessionId,
                    cipherData: cipherData,   // Encrypted xml data
                    payslip: document.getElementById('payslip').files[0]};
var formData = new FormData();
for (var key in myFormData) {
    console.log(key, myFormData[key]);
    formData.append(key, myFormData[key]);
}
$.ajax({
    url : 'api/rootpath/childpath',
    type : 'POST',
    processData: false,
    contentType: false,    // Here the contentType is set to false, so what should I put at @Consumes in java code
    data : {
        formData: formData
    }, …
Run Code Online (Sandbox Code Playgroud)

java rest jquery jax-rs jersey

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

如何获取 REST 请求的请求内容类型?

使用 JAXB 实现 REST-Web 服务,我们有几种方法可以产生输出。

包含所有这些方法的类用@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }). 如果请求通过了happy-path(没有发生错误),我们会在我们的方法中返回POJO,并且JAXB 会动态地将这些对象编组到application/xmlor 中application/json,因为客户端通过Accept: application/xxx;请求标头中的方式请求它。

我的问题是如何获取请求的内容类型,因为如果发生错误,我们将抛出WebApplicationException一个响应,其中应包含格式化为请求的内容类型的自定义错误消息。

java rest jax-rs jaxb

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

从apache cxf REST响应中删除空值字段

我在我的REST服务web容器中使用apache-cxf 2.7.11+ jackson (codehaus) 1.9.13+ spring 3.5.我想知道什么是null从REST响应中删除值字段的最佳方法.

例如:
我的回复现在是这样的:

{
 "name": "MyName",
 "age": 10,
 "address": null
}
Run Code Online (Sandbox Code Playgroud)

我希望我的回复是这样的(该address字段已被删除):

{
 "name": "MyName",
 "age": 10
}
Run Code Online (Sandbox Code Playgroud)

我在apache-cxf这里读到了拦截器和过滤器:

并想知道什么是最佳做法?是否有任何可配置的设置,我可以更改而不是实现我自己的文件管理器或拦截器类?

我正在使用beans.xml文件进行配置,因此我正在研究如何在这里配置它,我的bean是:

<bean id="jaxrsRestJacksonObjectMapper" class="org.codehaus.jackson.map.ObjectMapper"/>

<bean id="jsonProvider" class="org.codehaus.jackson.jaxrs.JacksonJsonProvider">
    <property name="mapper" ref="jaxrsRestJacksonObjectMapper"/>
</bean>


<jaxrs:server id="restContainer" address="/">
        <jaxrs:serviceBeans>

        </jaxrs:serviceBeans>
        <jaxrs:providers>
            <ref bean="jsonProvider"/>
        </jaxrs:providers>

</jaxrs:server>
Run Code Online (Sandbox Code Playgroud)

干杯!

apache rest cxf jax-rs jackson

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

无法找到类型的上下文数据:java.ws.rs.container.ContainerRequest(Wildfly 错误)

我正在使用 Wildfly 9.0.1.Final

我正在部署一个 REST 应用程序,它的端点定义如下:

@GET
@Path("/view/products")
@Produces(MediaType.APPLICATION_JSON)
@CORSEnabled
@Protected
public String getConfiguredProducts(
    @Context ContainerRequestContext request) {
    if (request != null) {
        Integer companyId = (Integer) request.getProperty("company");
        if (companyId != null) {
             //do stuff
        }
    }
    // ... more staff
}
Run Code Online (Sandbox Code Playgroud)

当应用程序运行时,上下文被注入,即“请求”非空。

当我尝试检索该属性时,我得到了错误:

executing GET /complaints/view/products:        
org.jboss.resteasy.spi.LoggableFailure: Unable to find contextual data    
of type: javax.ws.rs.container.ContainerRequestContext
Run Code Online (Sandbox Code Playgroud)

请注意,该应用程序在 glassfish/jersey 上运行没有问题,当我尝试将其移动到 wildfly/resteasy 时出现了问题。

有任何想法吗?

jax-rs resteasy wildfly

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

请求实体不能为空

我是Jax-RS的新手。我正在尝试使用Jersey实现一个简单的GET方法。我正在获得Collection资源的正确输出,但是实例资源却出现“ ERROR 400 Bad Request”。我被困在这一点上。一切似乎都是正确的,但我缺少一些我无法弄清的东西。我已经尝试了最近10天。任何帮助将是可观的。请在下面找到我的代码。我使用的是POSTMAN rest客户端,它抛出“意外的'T'”作为响应,而ARC则抛出“请求实体不能为空”。并且都是错误400错误的请求。

这是我的web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">
    <display-name>MessangerWithoutMaven</display-name>
    <welcome-file-list>

        <welcome-file>index.jsp</welcome-file>

    </welcome-file-list>

    <servlet>
        <servlet-name>Jersey Web Application</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.manish.jax_rs.Messanger</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/webapi/*</url-pattern>
    </servlet-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud)

这是我的MessageResource.java:

package com.manish.jax_rs.Messanger.resources;

import java.util.List;

import javax.websocket.server.PathParam;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import com.manish.jax_rs.Messanger.model.Message;
import com.manish.jax_rs.Messanger.service.MessageService;

@Path("/messages")
public class MessageResource {

    MessageService messageService = new MessageService();
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public List<Message> getMessages(){

        return …
Run Code Online (Sandbox Code Playgroud)

web-services jax-rs jersey java-ee http-status-code-400

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

如何使用javax.ws.rs执行输入验证?

我正在使用实现REST API javax.ws.rs.实现目标是尽可能安全,因此应验证每个输入.

对于输入验证,我实现一个公共类ValidatingHttpRequest实现HttpServletRequest.

我可以识别出11个甚至被调用的方法,现在所有其他方法都会抛出UnsupportedOperationException.但是,其中一些方法处理REST框架显然使用的内容.例如,我的代码不关心标题,而是getHeaders被调用.通过大量的逆向工程,我将能够找出使用的标头,并且应该进行验证,当然我可以进行验证.可能会引入非最佳行为,也可能是一些错误.并且HTTP请求有一些类似的方面.

但是之前没有人这样做过,可能有人真正了解REST框架是如何工作的?或者是不必要的,因为框架本身不能被愚弄?

所以我正在寻找一个完全验证的HttpServletRequest实现,或者说是为什么在这种情况下没有必要.当然,我将使用实现验证请求正文和参数.

java validation web-services jax-rs

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

如何返回带有消息的响应,JAX RS

我有一个使用jax-rs的Web服务,我的服务返回一个对象列表,但是您不知道如何添加自定义状态值来响应,例如,我要构建的结果如下:

如果可以:

{
   "status": "success",
   "message": "list ok!!",
   "clients": [{
        "name": "john",
        "age": 23
    },
    {
        "name": "john",
        "age": 23
    }]
}
Run Code Online (Sandbox Code Playgroud)

如果是错误:

{
   "status": "error",
   "message": "not found records",
   "clients": []
}
Run Code Online (Sandbox Code Playgroud)

我的休息服务:

 @POST
 @Path("/getById")
 @Consumes(MediaType.APPLICATION_JSON)
 @Produces(MediaType.APPLICATION_JSON)
 public List<Client> getById(Client id) {

  try {

       return Response.Ok(new ClientLogic().getById(id)).build();
       //how to add status = success, and message = list! ?

    } catch (Exception ex) {
       return  ??   
       // ex.getMessage() = "not found records"
       //i want return json with satus = error …
Run Code Online (Sandbox Code Playgroud)

java json return response jax-rs

3
推荐指数
2
解决办法
7448
查看次数