对于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) 我正在尝试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) 我需要收到一个HTTP Post Multipart,它只包含2个参数:
设置身体的正确方法是什么?我将使用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多部分请求中接收这两个内容?
提前致谢
我在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时它停止工作.
任何提示或解决方案将不胜感激.
我刚刚听说过Apache Wink,我想知道它与Jersey或JBoss RESTEasy相比有什么不同.在其他两个不能做的事情中可以做些什么?
我们一直在使用Jersey进行一些内部项目,主要是因为它的简单性,但我无法弄清楚是什么让其他两个更好,我会考虑切换.有没有人有任何用例,其中每个填充利基?
我需要RESTFul webservices.由我的团队决定是否使用Jersey或Restlet或RESTEasy或其他任何东西.在省略其他框架之后,我们无法在RESTEasy和Jersey之间做出选择.
由于它们似乎几乎相同,我们应该考虑什么?
客户端API应该简单而丰富.我们已经在生产中使用JBoss 5.1.
请告诉我Jersey和RESTEasy的优缺点.除了它来自JBoss,我无法找到任何有效的泽西岛点.
我首先在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的版本控制时使用最佳实践
我有一场包含以下内容的战争:
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.jspRun 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) 我有一个服务,其中路径的最后一部分是可选的,用户可以输入/ mypath /和/ mypath/param1 /.
我试图使用正则表达式来过滤路径的最后部分:
@Path("/mypath{param1: (/param1)?}")
我正在使用RestEasy作为我的JAX-RS提供程序,代码在Tomcat中按预期工作,但是当我在JBoss中部署它时,当我不提交可选部分时,我得到405返回代码.
我在这里做错了什么,或者不可能以便携的方式实现这个目标?
我使用ExecutorService和Future(这里是示例代码)在一个带有超时的单独线程中运行一个进程(线程"生成"发生在AOP方面).
现在,主线程是Resteasy请求.Resteasy使用一个或多个ThreadLocal变量来存储我需要在Rest方法调用中的某个时刻检索的一些上下文信息.问题是,由于Resteasy线程在新线程中运行,因此ThreadLocal变量将丢失.
将Resteasy使用的任何ThreadLocal变量"传播"到新线程的最佳方法是什么?似乎Resteasy使用多个ThreadLocal变量来跟踪上下文信息,我想"盲目地"将所有信息传递给新线程.
我查看了子类化ThreadPoolExecutor并使用beforeExecute方法将当前线程传递给池,但我找不到将ThreadLocal变量传递给池的方法.
有什么建议吗?
谢谢