标签: resteasy

Java 8 LocalDate Jackson格式

对于java.util.Date,当我这样做

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy")  
  private Date dateOfBirth;
Run Code Online (Sandbox Code Playgroud)

然后在我发送的JSON请求中

{ {"dateOfBirth":"01/01/2000"} }  
Run Code Online (Sandbox Code Playgroud)

有用.

我应该如何为Java 8的LocalDate字段执行此操作?

我试过了

@JsonDeserialize(using = LocalDateDeserializer.class)  
@JsonSerialize(using = LocalDateSerializer.class)  
private LocalDate dateOfBirth;  
Run Code Online (Sandbox Code Playgroud)

它没用.

有人可以让我知道这是正确的方法吗?

以下是依赖项

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>jaxrs-api</artifactId>
     <version>3.0.9.Final</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.jaxrs</groupId>
    <artifactId>jackson-jaxrs-json-provider</artifactId>
    <version>2.4.2</version>
</dependency>
<dependency>
    <groupId>com.wordnik</groupId>
    <artifactId>swagger-annotations</artifactId>
    <version>1.3.10</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

java json jax-rs resteasy jackson

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

无法从START_OBJECT标记中反序列化java.util.ArrayList的实例

我正在尝试POST一个List自定义对象.请求正文中的我的JSON是这样的:

{
    "collection": [
        {
            "name": "Test order1",
            "detail": "ahk ks"
        },
        {
            "name": "Test order2",
            "detail": "Fisteku"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

处理请求的服务器端代码:

import java.util.Collection;

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;


@Path(value = "/rest/corder")
public class COrderRestService {

    @POST
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Response postOrder(Collection<COrder> orders) {
        StringBuilder stringBuilder = new StringBuilder();
        for (COrder c : orders) {
            stringBuilder.append(c.toString());
        }
        System.out.println(stringBuilder);
        return Response.ok(stringBuilder, MediaType.APPLICATION_JSON).build();
    }
}
Run Code Online (Sandbox Code Playgroud)

实体COrder:

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class …
Run Code Online (Sandbox Code Playgroud)

java spring jax-rs resteasy jackson

102
推荐指数
7
解决办法
29万
查看次数

REST - 带有JSON的HTTP Post Multipart

我需要收到一个HTTP Post Multipart,它只包含2个参数:

  • 一个JSON字符串
  • 二进制文件

设置身体的正确方法是什么?我将使用Chrome REST控制台测试HTTP调用,所以我想知道正确的解决方案是为JSON参数和二进制文件设置"标签"键.

在服务器端我正在使用Resteasy 2.x,我将阅读这样的Multipart主体:

@POST
@Consumes("multipart/form-data")
public String postWithPhoto(MultipartFormDataInput  multiPart) {
  Map <String, List<InputPart>> params = multiPart.getFormDataMap();
  String myJson = params.get("myJsonName").get(0).getBodyAsString();
  InputPart imagePart = params.get("photo").get(0);
  //do whatever I need to do with my json and my photo
}
Run Code Online (Sandbox Code Playgroud)

这是要走的路吗?使用标识特定内容处置的键"myJsonName"检索我的JSON字符串是否正确?有没有其他方法可以在一个HTTP多部分请求中接收这两个内容?

提前致谢

java rest json http resteasy

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

CreateProcess error = 206,运行main()方法时文件名或扩展名太长

我在eclipse helios中有这个错误:

执行命令行时发生异常.无法运行程序"C:\ Program Files(x86)\ Java\jre6\bin\javaw.exe"(在目录"C:\ Users\motiver\helios_workspace\TimeTracker"中):CreateProcess error = 206,文件名或扩展名为太长

我研究了一下,但在使用Google App Engine时,大多数问题都与DataNucleus有关.但我没有使用与Google App Engine远程相关的任何内容.我正在使用JBOSS 6上的Servlet 3.0进行一个小项目.我正在使用Hibernate 4.1.2 for ORM和RESTEasy来公开Web服务.我创建了一个util文件,它有一个main()方法,基本上删除并重新创建模式.当我需要一个干净的数据库用于测试目的时,我运行main()方法.它在Tomcat 7上运行良好,但当我转移到JBoss 6时它停止工作.

任何提示或解决方案将不胜感激.

java eclipse hibernate servlets resteasy

80
推荐指数
9
解决办法
16万
查看次数

如何选择Jersey,Apache Wink和JBoss RESTEasy?

我刚刚听说过Apache Wink,我想知道它与JerseyJBoss RESTEasy相比有什么不同.在其他两个不能做的事情中可以做些什么?

我们一直在使用Jersey进行一些内部项目,主要是因为它的简单性,但我无法弄清楚是什么让其他两个更好,我会考虑切换.有没有人有任何用例,其中每个填充利基?

apache jax-rs jersey resteasy

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

RESTEasy还是Jersey?

我需要RESTFul webservices.由我的团队决定是否使用Jersey或Restlet或RESTEasy或其他任何东西.在省略其他框架之后,我们无法在RESTEasy和Jersey之间做出选择.

由于它们似乎几乎相同,我们应该考虑什么?

客户端API应该简单而丰富.我们已经在生产中使用JBoss 5.1.

请告诉我Jersey和RESTEasy的优缺点.除了它来自JBoss,我无法找到任何有效的泽西岛点.

rest web-services jersey resteasy

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

处理JAX-RS REST API URI版本控制的最佳方法

我首先在stackoverflow中进行了搜索,但我无法找到与我的问题相关的任何答案.我能找到的只是与REST uri设计相关的问题.

我在后端的问题.假设我们有两个不同版本的REST uri

http://api.abc.com/rest/v1/products

http://api.abc.com/rest/v2/products

在后端方面(服务器端代码)遵循基于版本的这两组API的正确路由,可管理性和现有类的重用的最佳方法是什么?

我已经考虑过使用不同的@Path注释定义资源类的方法,例如,在该包的ProductsResource类中单独包含v1和v2的包,定义

    package com.abc.api.rest.v1.products;
    @Path("/rest/v1/products")
    public class ProductsResource {...}

    package com.abc.api.rest.v2.products;
    @Path("/rest/v2/products")
    public class ProductsResource {...}
Run Code Online (Sandbox Code Playgroud)

然后有基于版本的实现逻辑.这种方法的问题是当我们只从api集合中改变一个特定的资源api时,我们也必须将其他类复制到v2包中.我们能避免吗?

怎么写自定义注释说@Version并拥有它支持的版本的值?现在无论是v1还是v2,两个请求都将转到相同的资源类.

比如说

    package com.abc.api.rest.products;
    @Path("/rest/{version: [0-9]+}/products")
    @Version(1,2)
    public class ProductsResource {...}
Run Code Online (Sandbox Code Playgroud)

更新:

Jarrod有一个API版本控制建议来处理标题中的版本.这也是一种方法,但我期待在遵循基于URI的版本控制时使用最佳实践

java rest jax-rs resteasy

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

PersistenceContext EntityManager注入NullPointerException

我有一场包含以下内容的战争:

META-INF/MANIFEST.MF
WEB-INF/classes/META-INF/persistence.xml
WEB-INF/classes/com/test/service/TestServlet.class
WEB-INF/classes/com/test/service/TestEntity.class
WEB-INF/classes/jndi.properties
WEB-INF/classes/postgresql-ds.xml
WEB-INF/jboss-web.xml
WEB-INF/web.xml
index.jsp
Run Code Online (Sandbox Code Playgroud)

persistence.xml中:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
    <persistence-unit name="test">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>java:/TestDS</jta-data-source>

        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="true" />
        </properties>
    </persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)

web.xml中:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Test Web Application</display-name>

    <context-param>
        <param-name>resteasy.scan</param-name>
        <param-value>true</param-value>
    </context-param>
    <listener>
        <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
    </listener>
    <servlet>
        <servlet-name>Resteasy</servlet-name>
        <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Resteasy</servlet-name>
        <url-pattern>/service/*</url-pattern>
    </servlet-mapping>

    <resource-ref>
        <res-ref-name>TestDS</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref>
</web-app>
Run Code Online (Sandbox Code Playgroud)

我的TestServlet类如下:

package com.test.service; …
Run Code Online (Sandbox Code Playgroud)

java jboss hibernate jpa resteasy

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

Jax-RS中的可选@PathParam

我有一个服务,其中路径的最后一部分是可选的,用户可以输入/ mypath // mypath/param1 /.

我试图使用正则表达式来过滤路径的最后部分:

@Path("/mypath{param1: (/param1)?}")

我正在使用RestEasy作为我的JAX-RS提供程序,代码在Tomcat中按预期工作,但是当我在JBoss中部署它时,当我不提交可选部分时,我得到405返回代码.

我在这里做错了什么,或者不可能以便携的方式实现这个目标?

java regex jboss jax-rs resteasy

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

将ThreadLocal传播到从ExecutorService获取的新线程

我使用ExecutorService和Future(这里是示例代码)在一个带有超时的单独线程中运行一个进程(线程"生成"发生在AOP方面).

现在,主线程是Resteasy请求.Resteasy使用一个或多个ThreadLocal变量来存储我需要在Rest方法调用中的某个时刻检索的一些上下文信息.问题是,由于Resteasy线程在新线程中运行,因此ThreadLocal变量将丢失.

将Resteasy使用的任何ThreadLocal变量"传播"到新线程的最佳方法是什么?似乎Resteasy使用多个ThreadLocal变量来跟踪上下文信息,我想"盲目地"将所有信息传递给新线程.

我查看了子类化ThreadPoolExecutor并使用beforeExecute方法将当前线程传递给池,但我找不到将ThreadLocal变量传递给池的方法.

有什么建议吗?

谢谢

java multithreading thread-local resteasy threadpool

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