che*_*iov 6 java rest json jersey
我将JSON解析为Date对象时遇到问题.
我使用Jersey 1.14,Tomcat 7.
我的资源类:
@Path("/user")
@Produces(MediaType.APPLICATION_JSON)
public class UserResource {
@Path("/~/update")
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response updateUser(User user) {
// There are update in DB
// but Date field always null
return Response.ok().build();
}
@Path("/~/get")
@GET
public User getUser() {
// There are I fetch User from DB
// Works fine, User instance returns in correct JSON
return user;
}
}
Run Code Online (Sandbox Code Playgroud)
我的型号:
@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "user")
public class User {
@XmlElement(name = "name")
private String name;
@XmlElement(name = "myDate")
@XmlJavaTypeAdapter(DateAdapter.class)
private Date myDate;
// Getters and Setters
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getMyDate() {
return myDate;
}
public void setMyDate(Date myDate) {
this.myDate = myDate;
}
}
Run Code Online (Sandbox Code Playgroud)
我的XmlAdapter for Date类:
public class DateAdapter extends XmlAdapter<String, Date> {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat(
"yyyy-MM-dd");
@Override
public String marshal(Date v) {
return dateFormat.format(v);
}
@Override
public Date unmarshal(String v) {
try {
return dateFormat.parse(v);
} catch (ParseException e) {
throw new WebApplicationException();
}
}
}
Run Code Online (Sandbox Code Playgroud)
为什么在我的POST方法中始终为null Date字段?这个JSON我想发送:
{"name":"Peter","myDate":"1988-05-31"}
Run Code Online (Sandbox Code Playgroud)
PS抱歉我的英语不好.
UPD. 我的客户代码:
public class Tester {
public static void main(String... args) throws FileNotFoundException, JSONException {
Client c = Client.create();
WebResource r = c.resource("http://localhost:8080/myapp/user/~/get");
ClientResponse resp = r.get(ClientResponse.class);
JSONObject entity = resp.getEntity(JSONObject.class);
entity.remove("myDate");
entity.put("myDate", "1988-05-31");
r = c.resource("http://localhost:8080/myapp/user/~/update");
resp = r.entity(entity, MediaType.APPLICATION_JSON).post(ClientResponse.class);
entity = resp.getEntity(JSONObject.class);
System.out.println(entity);
}
}
Run Code Online (Sandbox Code Playgroud)
UPD 2.
我的应用程序中发现了一个非常愚蠢的错误.而不是java.util.Date我在我的Model类中使用了java.sql.Date :(
这就是为什么Date字段总是为null.
您的服务器代码是正确的。错误出现在您的客户端代码中:
resp = r.entity(entity, MediaType.APPLICATION_JSON).post(ClientResponse.class);
Run Code Online (Sandbox Code Playgroud)
应该:
resp = r.type(MediaType.APPLICATION_JSON).post(ClientResponse.class,entity);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8618 次 |
| 最近记录: |