我有一个对象,我想在JSON中作为RESTful资源提供服务.我打开了Jersey的JSON POJO支持(在web.xml中):
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Run Code Online (Sandbox Code Playgroud)
但是当我尝试访问该资源时,我得到了以下异常:
SEVERE: A message body writer for Java type, class com.example.MyDto, and MIME media type, application/json, was not found
SEVERE: Mapped exception to response: 500 (Internal Server Error)
javax.ws.rs.WebApplicationException
...
Run Code Online (Sandbox Code Playgroud)
我正在尝试提供的类并不复杂,所有它都是一些公共final字段和一个设置所有它们的构造函数.这些字段都是字符串,基元,与此类似的类或其列表(我尝试使用普通列表而不是通用List <T>,但无济于事).有谁知道是什么给出的?谢谢!
Java EE 6
泽西岛1.1.5
GlassFish 3.0.1
我正在尝试将以下有效负载发布到基于Jersey的Web服务:
{
"firstname":"Jimmy",
"lastname":"Johns",
"addresses":
[
{
"street":"19 Mayberry Drive",
"city":"Mayberry",
"state":"nc",
"postalcode":"27043",
"country":"us",
"addresstype":1
}
],
"data":
{
"eyes":"blue",
"hair":"brown",
"sandwich":"roast beef"
}
}
Run Code Online (Sandbox Code Playgroud)
我的泽西岛代码:
@POST
public Response create( Person person )
{
createBo( person ); <------- stopped here in debugger
...
Run Code Online (Sandbox Code Playgroud)
突然停摆就像新泽西打电话给我,我看到地址的人冲出来用什么我正在寻找(在JSON是头上).但是,我的数据元组不存在.我知道Jersey正在为Address es 调用我的无参数构造函数,并且它的调用者正在被调用,但是我在夜间亮起泽西可能或可能不会尝试使用这些随机("数据")元组在我的JSON中.(我说"随机",因为在不同的调用中,这些可能是"洞穴":"深,黑","山":"高,宽"等.这是我界面的一部分.)
为了充实我正在谈论的内容,请将这些POJO视为上述内容:
@XmlAccessorType( XmlAccessType.FIELD )
@XmlRootElement
public class Person implements Serializable
{
@XmlElement
private List< Address > addresses = new ArrayList< Address >();
@XmlElement
private Map< String, String > data = new …Run Code Online (Sandbox Code Playgroud) JSON在泽西岛使用杰克逊处理器时,何时以及为什么我需要JAXB在两者之间使用注释?Object->JAXB->JSON
杰克逊还提供自己的JAX-RS直接供应商Object->JSON.这种方法缺少什么?或者为什么我更喜欢另一个
ps:我也用春天