我想问一个关于REST方法的简单问题。
所以,这是问题所在: 我们应该以这种形式在客户端显示当前日期: DD.MM.YYYY HH:MM:SS
现在,问题是: 服务器应为客户提供一个随时显示的字符串,其中包含: “ 04.07.2018 13:53:23” 要么 服务器应为客户提供某种通用的“日期”字符串,例如: 2018-07-02T09:22:02 + 02:00 并且客户端应按照需要显示的方式(DD.MM.YYYY HH:MM:SS格式)对其进行处理。
对于回答在这种情况下(关于REST体系结构设计)哪种方法更好的答案将不胜感激。
答案 0 :(得分:2)
对我来说,在ISO 8601中交换日期更有意义。这是一种众所周知的常用格式,可以通过大多数日期操作工具进行解析。如果您收到ISO格式的日期,则可以在客户端获得更大的灵活性。您可以根据需要设置其格式,而无需更改服务器代码,并且可以在不同的地方使用不同的格式。
答案 1 :(得分:1)
这两个方面各有利弊
优点
缺点
优点
缺点
如果您希望有大量的客户群,则最好使用“常规格式”选项,该选项在客户端也具有灵活性,可以根据需要重新使用和重新格式化。
如果您只希望普通客户群和客户应用程序在多个屏幕上重用/重新格式化时间没有那么复杂,那么“准备显示”将是不错的选择。
答案 2 :(得分:0)
您必须使用自定义转换器,例如:球衣的MessageBodyWriter
代码:
package com.arun.java.customconverter;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.util.Date;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.MessageBodyWriter;
import javax.ws.rs.ext.Provider;
@Provider
@Produces("text/shortdate")
public class ShortDateMessageBodyWriter implements MessageBodyWriter<Date> {
@Override
public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
// TODO Auto-generated method stub
return Date.class.isAssignableFrom(type);
}
@Override
public void writeTo(Date t, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType,
MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream)
throws IOException, WebApplicationException {
String shortdate= t.getDate()+"-"+t.getMonth()+"-"+t.getYear();
entityStream.write(shortdate.getBytes());
}
}