【发布时间】:2018-04-03 17:36:58
【问题描述】:
我正在用 Java-EE 中的 REST 接口开发一个 CRUD 应用程序。
我有一些包含日期字段的实体。当我想使用请求正文中带有 JSON 的 POST 请求创建此类实体的实例时,jax-rs(或底层反序列化器)会抱怨解析日期部分。
这是我得到的例外:
Servlet.service() 用于 servlet service.JAXRSConfiguration 抛出 异常java.time.format.DateTimeParseException:文本'2011-11-11' 无法在索引 10 处解析
我试图在请求中发送这个:
{
"title": "testTitle",
"description": "testDescription",
"playtime": 50,
"creationDate": "2011-11-11"
}
我应该如何在 json 中定义日期以使其成功解析?哪种格式正确?
这里是实体类:
@Entity
@NamedQueries({
@NamedQuery(name = "Movie.findAll", query = "SELECT m FROM Movie m")
})
public class Movie extends AbstractDao{
private String title;
private String description;
@ManyToMany(mappedBy = "movies")
private List<Actor> actors;
@ManyToMany(mappedBy = "movies")
private List<Director> directors;
private int playtime;
@OneToOne(cascade = CascadeType.PERSIST)
private Trailer trailer;
@Temporal(value = TemporalType.DATE)
private Date creationDate;
getters,setters, etc
这里是 jax-rs 服务:
@Path("/movies")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class MovieRestService {
@Inject
private MovieService movieService;
@GET
public List<Movie> getMovies(){
return movieService.findAll();
}
@Path("{id}")
@GET
public Movie getMovie(@PathParam("id") long id){
return movieService.findById(id);
}
@POST
public Movie addMovie(Movie movie){
return movieService.create(movie);
}
@Path("{id}")
@PUT
public Movie updateMovie(Movie movie, @PathParam("id") long id){
return movieService.update(movie,id);
}
@Path("{id}")
@DELETE
public Movie deleteMovie(@PathParam("id") long id){
return movieService.delete(id);
}
}
【问题讨论】:
-
其实我想我已经遇到过这个问题,但它是一个不同的场景 imo。
-
你可以尝试将数据读取为 json 并查看你得到的格式吗?在 Java 端创建一些数据并尝试将其读取为 json。
-
您可以尝试在日期字段中添加注释,如这个问题stackoverflow.com/questions/13803391/… 和@clinomaniac 提到的一个
标签: java json rest date jax-rs