我使用JAX-RS方法注释创建了RESTful Web服务:
@GET
@Path("/test")
@Produces(MediaType.APPLICATION_JSON)
public MyThing test()
{
MyThing myObject = new MyThing(LocalDateTime.now());
return myObject;
}
这很好用,但是我想调整一件事:如果返回的Java对象包含新Java 8 LocalDateTime类型的属性,则将其表示为JSON对象:
{"myDateTimeProperty":{"hour":14,"minute":32,"second":39,"year":2014,"month":"NOVEMBER","dayOfMonth":6,"dayOfWeek":"THURSDAY","dayOfYear":310,"monthValue":11,"nano":0,"chronology":{"calendarType":"iso8601","id":"ISO"}},...}
我如何告诉JAX-RS返回JavaScript Date.toJSON()样式的字符串,例如
{"myDateTimeProperty":"2014-11-07T15:06:36.545Z",...}
代替?
我以前从未使用LocalDateTime
过,所以我决定进行一些测试。这是我的发现:
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>${jersey.version}</version>
</dependency>
public class LocalDateTimeAdapter extends XmlAdapter<String, LocalDateTime> {
@Override
public LocalDateTime unmarshal(String s) throws Exception {
return LocalDateTime.parse(s);
}
@Override
public String marshal(LocalDateTime dateTime) throws Exception {
return dateTime.toString();
}
}
// Getter for model class
@XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
public LocalDateTime getDateTime() {
return dateTime;
}
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson2-provider</artifactId>
<version>${resteasy.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.4.0</version>
</dependency>
我们需要确保注册 JacksonJaxbJsonProvider
因此,我想似乎任何使用Jackson的提供程序都不会在没有一些自定义配置的情况下给您想要的结果,无论是通过适配器(如上所示)还是通过其他自定义配置。该jersey- media-moxy
供应商不使用杰克逊。
在大多数情况下,以上信息不正确。
莫西 并不 默认工作。它的工作原理进行序列化通过简单地调用toString()
,这可能会或可能不是你想要的是,它将无法正常工作时, 德 -serializing。如果您使用的是MOXy,直到它支持Java8时间,您将需要使用XMLAdapter
Jackson 您将需要配置其Java8时间支持。泽西岛和RESTEasy都是这种情况。
我使用JAX-RS方法注释创建了一个RESTful web服务:
从rest服务抛出的异常以某种方式返回为JSON是否可能?我有一个JAX-RS Rest服务来实现这一点。当我现在抛出它时,它被映射到一个HTML响应,这不是我想要的。据我所知,ExceptionMapper也会将其映射到HTML?是否有其他可供选择的或库允许以JSON格式返回异常?
问题内容: 我想知道如何对方法返回List的JSON数组,例如: 我想知道如何在我的方法中接收List参数类型 我已经阅读了有关JaxbContext的文章,我了解它如何为我提供帮助。 问题答案: 使用JAXB时,支持两种类型。第一个是元素列表,第二个是元素定界字符串(“常规” XML值或属性,使用某些定界符将其解析为列表)。第一个似乎是您想要的(“数组”)。 有关参考,请参见:http : //
Edit:不幸的是,我需要以日期的形式获得结果,而不是字符串,所以我不能使用sdf.format(New Date().getTime()),因为它返回字符串。另外,我需要返回的日期是当前时间的日期,而不是来自静态字符串。我希望这能澄清
我尝试解析时间格式化字符串,现在当我解析字符串“2014-01-07 95:25:37”时,它返回一个日期,而不是抛出ParseException。谁知道如何让它抛出异常。谢谢乔治。 输出:
问题内容: 在我的程序中,我试图将日期转换为指定格式的字符串,然后再转换为日期。我需要日期为dd-MMM- yy格式。因此,我正在使用SimpleDateFormat将日期转换为dd-MMM-yy格式, 结果是我预期的,即12年5月23日,但是当我使用parse()将字符串转换回日期时,它将更改为IST 2012年5月23日星期三13:16:14。 有什么方法可以将字符串转换回日期而不更改格式?我