本文介绍了Spring rest xml dateTime格式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们将SpringBoot与Spring Rest和Jackson一起使用。我们使用Java 8 LocalDateTime

We use SpringBoot with Spring Rest and Jackson. We use Java 8 LocalDateTime.

RestController。

RestController.

@RestController
@RequestMapping(method = RequestMethod.GET, produces = {MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE})
public class SimpleRestController {

    @Autowired
    private RestService restService;

    @RequestMapping("/api/{id}")
    public ResponseEntity<RestObject> getModel(@PathVariable Long id) {
        RestObject restObject = restService.getModel(id);
        HttpStatus httpStatus = HttpStatus.OK;

        if (restObject == null) {
            httpStatus = HttpStatus.NO_CONTENT;
        }

        return new ResponseEntity<>(restObject, httpStatus);
    }
}

RestObject 由控制器返回。

import javax.xml.bind.annotation.XmlRootElement;
import java.io.Serializable;
import java.time.LocalDateTime;

@XmlRootElement
public class RestObject implements Serializable {

    private LocalDateTime timestamp;
    private String title;
    private String fullText;
    private Long id;
    private Double value;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    public LocalDateTime getTimestamp() {
        return timestamp;
    }

    //Other getters and setters.
}

当我用发送GET请求时效果很好Accept = application / json header。这是回复。

It works well when I send a GET request with Accept=application/json header. This is the response.

{
  "timestamp": "2017-06-09 15:58:32",
  "title": "Rest object",
  "fullText": "This is the full text. ID: 10",
  "id": 10,
  "value": 0.22816149915219197
}

然而 Accept = application / xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<restObject>
    <fullText>This is the full text. ID: 10</fullText>
    <id>10</id>
    <timestamp/>
    <title>Rest object</title>
    <value>0.15697306201038086</value>
</restObject>

时间戳字段为空。如何使它工作?

Timestamp field is empty. How to make it work?

推荐答案

这是解决方案!

这是回复

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<restObject>
    <fullText>This is the full text. ID: 10</fullText>
    <id>10</id>
    <timestamp>2017-06-09 16:31:01</timestamp>
    <title>Rest object</title>
    <value>0.0021564103099468435</value>
</restObject>

1)添加课程 DateTimeAdapter

import javax.xml.bind.annotation.adapters.XmlAdapter;
import java.time.LocalDateTime;

public class DateTimeAdapter extends XmlAdapter<String, LocalDateTime> {

    public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
    public static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern(DATE_FORMAT);

    public LocalDateTime unmarshal(String v) throws Exception {
        return LocalDateTime.parse(v, DATE_TIME_FORMATTER);
    }

    public String marshal(LocalDateTime v) throws Exception {
        return DATE_TIME_FORMATTER.format(v);
    }
}

2)更新 RestObject 类。在LocalDateTime字段上添加 @XmlJavaTypeAdapter(DateTimeAdapter.class)注释。

2) Update RestObject class. Add @XmlJavaTypeAdapter(DateTimeAdapter.class) annotation on the LocalDateTime field.

import com.ca.training.rest.server.config.DateTimeAdapter;
import com.fasterxml.jackson.annotation.JsonFormat;

import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import java.io.Serializable;
import java.time.LocalDateTime;

import static com.ca.training.rest.server.config.DateTimeAdapter.DATE_FORMAT;

@XmlRootElement
public class RestObject implements Serializable {

    private LocalDateTime timestamp;
    private String title;
    private String fullText;
    private Long id;
    private Double value;

    @XmlJavaTypeAdapter(DateTimeAdapter.class)
    @JsonFormat(pattern = DATE_FORMAT)
    public LocalDateTime getTimestamp() {
        return timestamp;
    }

    //Other getters and setters.
}

我从这里接受了这个想法

和这里

I took the idea from herehttp://blog.bdoughan.com/2011/05/jaxb-and-joda-time-dates-and-times.htmland hereJAXB: Isn't it possible to use an XmlAdapter without @XmlJavaTypeAdapter?

这篇关于Spring rest xml dateTime格式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-21 02:58