REST - 标记条目已读/未读

时间:2015-04-10 06:07:11

标签: java string rest

我做了这个简单的RESP应用程序,用于将博客条目输入到html页面,这里是一个示例代码..任何想法为什么?当我谷歌搜索它看起来应该没问题。我告诉你我做了什么..每个条目都有它的id,它保存在arraylist中并且只有一个简单的属性文本..我想稍后添加一些特殊命令,所以我也可以在命令行中添加一个事件。我想添加一个函数,我可以将其标记为已读/未读,默认情况下未读...任何想法如何做?

由于

@Path("/")
public class RootResource {
private final EntryListResource entries = new EntryListResource();

@GET
@Path("favicon.ico")
public Response getFavicon() {
    return Response.noContent().build();
}

@GET
public Response get(@Context UriInfo uriInfo) {
    final URI location = uriInfo.getAbsolutePathBuilder().path("/entries").build();
    return Response.seeOther(location).build();
}

@Path("entries")
public EntryListResource getEntries() {
    return entries;
}
}

@XmlRootElement(name = "entryRef")
public class EntryResourceRef {
private int id;
private URI href;

@XmlAttribute
public URI getHref() {
    return href;
}

@XmlAttribute
public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public void setHref(URI href) {
    this.href = href;
}
}

最后

@XmlRootElement(name = "entry")
@XmlAccessorType(XmlAccessType.NONE)
public class EntryResource {
private int id;
private String text;


@GET
@Produces(MediaType.APPLICATION_XML)
public Response get() {
    return Response.ok(this).build();
}

@GET
@Produces(MediaType.TEXT_HTML)
public Response getHTML(@Context UriInfo uriInfo) {
    final StringBuilder sb = new StringBuilder();
 @PUT
@Consumes(MediaType.TEXT_PLAIN)
public Response updatePlain(String text,String description, @Context UriInfo uriInfo) {
    return update(text, description, uriInfo.getAbsolutePath());
}

@PUT
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response updateAsForm(@FormParam("text") String text, @FormParam("description") String description,@Context UriInfo uriInfo) {
    return update(description,text, uriInfo.getAbsolutePath());
}

private Response update(String text,String description, URI self) {
    if (getText().equals(text)) {
        throw new WebApplicationException(
                                          Response
                                          .status(Response.Status.CONFLICT)
                                          .entity("The blog entry text has not been modified")
                                          .type(MediaType.TEXT_PLAIN)
                                          .build()
                                          );
    }
    setText(text);
    return Response.seeOther(self).build();
}

来源

@XmlRootElement(name = "entries")
@XmlAccessorType(XmlAccessType.NONE)
public class EntryListResource {

private final AtomicInteger nextEntryId = new AtomicInteger(0);
private UriInfo uriInfo = null;


@GET
@Produces(MediaType.APPLICATION_XML)
public Response get() {
    return Response.ok(this).cacheControl(CC).build();
}

@XmlElement(name = "blog")
public Collection<EntryResourceRef> getEntries() {
    final Collection<EntryResourceRef> refs = new ArrayList<EntryResourceRef>();
    for (final EntryResource entry : entries.values()) {
        final EntryResourceRef ref = new EntryResourceRef();
        ref.setId(entry.getId());
        ref.setHref(getEntryUri(entry));
        refs.add(ref);
    }
    return refs;
}

1 个答案:

答案 0 :(得分:0)

您可以使用0和1来帮助您对结果进行排序。

在获取记录时,您可以在查询本身中附加“读取”或“未读”。示例如下:

Select news.*, 
(case news.STATUS
when 0 then 'Unread' 
when 1 then 'Read' 
end) as Status
from News news

这是一个原生SQL,或者你也可以在HQL中完成。

其他解决方案是您可以在新闻实体中使用枚举。这样你就可以在UI中显示字符串,在DB中它将保存序数值,即0或1.示例代码如下所示。

@Table(name = "NEW")
public class New 
{
    private NewsStatus newsStatus;
}


public static enum NewsStatus {
    READ{
        public String toString(){
            return "Read";
        }
    }, 
    UNREAD{
        public String toString(){
            return "Unread";
        }
    }
    public int getValue(){
        return this.ordinal() + 1;
    }
    public String getLabel(){
        return this.toString();
    }
    public static NewsStatus getByLabel(String label) 
    {
        if(label == null)
            return null;
        for(NewsStatus ns : NewsStatus.values()) {
            if(label.equalsIgnoreCase(ns.getLabel()))
                return ns;
        }
        return null;
    }
    public static NewsStatus getByValue(int value){
        return NewsStatus.values()[value-1];
    }
}

如果需要进一步的详细信息,请告诉我吗?

Krish