我正在使用Jersey REST创建一个简单的Spring Boot应用程序,以返回具有ID,消息,created(LocalDate)和作者的消息对象列表。
所创建的Java 8 LocalDate类型字段在xml响应中为空白。当我返回JSON响应时,它填充得很好。 DemoBean-
@XmlRootElement
public class DemoBean {
private long id;
private String message;
private LocalDate created;
private String author;
public DemoBean(){
}
public DemoBean(long id, String message, LocalDate created, String author) {
this.id = id;
this.message = message;
this.created = created;
this.author = author;
}
端点-
@GET
@Path("/messages")
@Produces(MediaType.APPLICATION_XML)
public List<DemoBean> getDemo(@QueryParam("message") String message){
log.info("getDemo() - START");
return demoService.getAllDemoBeans();
}
XML响应-
> <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <demoBeans>
> <demoBean>
> <author>xyz</author>
> <created/>
> <id>1</id>
> <message>Hey there!</message>
> </demoBean>
为什么创建的字段为空白?这里需要做什么?请帮忙。
答案 0 :(得分:1)
这里的主要原因是LocalDate
没有开箱即用的定义。所以您必须介绍自己的一个。
例如,您可以:
为XmlAdapter
定义适配器:
LocalDate
并用package us.atamai.service;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import java.time.LocalDate;
public class LocalDateAdapter extends XmlAdapter<String, LocalDate> {
public LocalDate unmarshal(String v) throws Exception {
return LocalDate.parse(v);
}
public String marshal(LocalDate v) throws Exception {
return v.toString();
}
}
标记吸气剂:
@XmlJavaTypeAdapter
之后,您将获得下一个输出:
@XmlJavaTypeAdapter(value = LocalDateAdapter.class)
public LocalDate getCreated() {
return created;
}