当前位置: 首页 > 知识库问答 >
问题:

泽西JSON和日期

刘焱
2023-03-14

我在解析JSON到日期对象时遇到一个问题。

    @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;
        }

    }
    @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;
        }
    }
    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();
            }
        }
    }
{"name":"Peter","myDate":"1988-05-31"}
    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);
        }
    }     

共有1个答案

冯飞鹏
2023-03-14

您的服务器代码是正确的。错误在您的客户端代码中:

resp = r.entity(entity, MediaType.APPLICATION_JSON).post(ClientResponse.class);

应该是:

resp = r.type(MediaType.APPLICATION_JSON).post(ClientResponse.class,entity);
 类似资料:
  • 我正在尝试使用JAX-RS(Jersey)构建JSON RESTful Webservice。我也在使用Maven构建应用程序。 我的第一个方法是 pom之后。xml- 所以我补充道 到我的pom文件。其他lib文件(例如jackson-cors-asl-1.7.1.jar、jackson-jaxrs-1.7.1.jar、jaxb impl,…)也可以在生成的war文件中找到//编辑:它还下载st

  • 问题内容: 我设置了一个Eclipse WebApp项目,并将Jersey和Jackson JAR放在WEB-INF / lib目录中。我想使用JSON序列化,但无法解决此错误: 在 WEB-INF / lib目录 文件夹包含以下JAR: web.xml : Greeting.java : WebApp项目在嵌入式Tomcat v7服务器中运行(在eclipse中查看“服务器”)。 要求 : 只要

  • 我花了太多的时间(我想超过10个小时)试图弄清楚如何让基本的json调用(来自angularjs)在我的泽西2.4上打开和处理。我已经在谷歌上尝试了所有可能的结果,但仍然在得到一个 415(不支持的媒体类型) 客户端和 组织。玻璃鱼。运动衫消息内部的MessageBodyProviderNotFoundException:找不到媒体类型=应用程序/json,类型=类的MessageBodyRead

  • 下面的代码有效 下面的代码是抛出错误 低于异常 [[FATAL]找不到public javax类型参数的注入源。ws。rs.core。回复com。特里姆布尔。帕斯。大声点。metricscollector。资源MetricsResource。索引1处的PostMetricData(java.lang.String,java.lang.String)。;source='ResourceMethod{

  • 我目前使用的是球衣 我现在要做的是设置泽西,这样当查询参数进来时(比如缩进),我可以告诉Jackson以“更漂亮的格式,也就是缩进”序列化JSON。您可以通过使用SerializationConfig.Feature.INDENT_OUTPUT配置JSON映射器来轻松地告诉Jackson这样做。 问题是,我如何在每个请求的基础上获取一个queryparam并使用它来修改Jackson的输出?

  • 问题内容: 我的问题是:为什么在创建部署在某种servlet容器(如jetty或tomcat)上的应用程序时执行JavaSE应用程序和ServletModule时需要创建AbstractModule?它们之间有什么区别? 我需要将Jersey与Guice集成在一起。是否需要注册Guice的存在才能以某种方式使用它?我是否可以仅启用注入并在我想要的任何地方(常规类,过滤器,处理程序,服务,DAO等)