Java json输出不符合排序顺序

Java json输出不符合排序顺序,java,web-services,rest,netbeans,Java,Web Services,Rest,Netbeans,我已经用JavaNetBeans创建了web服务,并通过RESTWeb服务调用了MySQL数据 编辑代码: For循环按排序顺序显示所有区域,那么为什么作为json输出,所有数据不按升序显示 我的方法如下: @GET @Path("/ShowAreasDup") @Produces(MediaType.APPLICATION_JSON) public List<EntityAreas> ShowAreasDup(){ ArrayList<EntityAreas

我已经用JavaNetBeans创建了web服务,并通过RESTWeb服务调用了MySQL数据

编辑代码:

For循环按排序顺序显示所有区域,那么为什么作为json输出,所有数据不按升序显示

我的方法如下:

    @GET
@Path("/ShowAreasDup")
@Produces(MediaType.APPLICATION_JSON)
public List<EntityAreas> ShowAreasDup(){

    ArrayList<EntityAreas> listSort;

    try{           
        Class.forName("com.mysql.jdbc.Driver");
        conn=DriverManager.getConnection(DB_URL,USER,PASSWORD);
        String query = "SELECT * FROM Areas ORDER BY AreaName";
        Statement statement = conn.createStatement();
        ResultSet resultset = statement.executeQuery(query);
    // iterate through the java resultset
    while (resultset.next())
    {
        int id = resultset.getInt("AreaID");
        String restroName = resultset.getString("AreaName");

        EntityAreas anames=new EntityAreas();
        anames.setAreaid(id);
        anames.setAreaname(restroName);
        ShowentityAreas.put(id, anames);      
    }       
    statement.close();            
    }
    catch(HeadlessException | SQLException |ClassNotFoundException ee)
    {
        JOptionPane.showMessageDialog(null, ee);
    }       

    listSort=new ArrayList<EntityAreas>(ShowentityAreas.values());
    Collections.sort(listSort,new Comparator<EntityAreas>(){

        @Override
        public int compare(EntityAreas o1, EntityAreas o2) {
            return o1.getAreaname().compareTo(o2.getAreaname());
        }

    });

    for(EntityAreas entityarea:listSort){
        System.out.println(entityarea);
    }

    return listSort;
} 
@GET
@路径(“/ShowAreasDup”)
@产生(MediaType.APPLICATION_JSON)
公共列表显示区域显示(){
数组列表排序;
试试{
Class.forName(“com.mysql.jdbc.Driver”);
conn=DriverManager.getConnection(数据库URL、用户、密码);
String query=“按区域名称从区域顺序中选择*”;
语句Statement=conn.createStatement();
ResultSet ResultSet=statement.executeQuery(查询);
//遍历java结果集
while(resultset.next())
{
intid=resultset.getInt(“AreaID”);
String restroName=resultset.getString(“AreaName”);
EntityAreas anames=新EntityAreas();
anames.setAreaid(id);
anames.setAreaname(restroName);
ShowentityAreas.put(id,anames);
}       
语句。close();
}
catch(HeadlessException | SQLException | ClassNotFoundException ee)
{
showMessageDialog(null,ee);
}       
listSort=newArrayList(ShowentityAreas.values());
Collections.sort(listSort,newcomparator(){
@凌驾
公共整数比较(EntityAreas o1,EntityAreas o2){
返回o1.getAreaname().compareTo(o2.getAreaname());
}
});
for(EntityAreas entityarea:listSort){
System.out.println(实体区域);
}
返回列表排序;
} 
提前谢谢你的帮助

编辑: 以上代码非常适合我
感谢大家为我提供了答案:)

鉴于您的代码,可能存在一些假设。最可能的情况是,
ShowAreas
将信息存储在非有序数据结构中(例如,
HashMap

如果您想按顺序维护您的值,您必须使用一些额外的数据结构。例如,可以使用
TreeSet
作为值

另一种解决方案是在返回值()之前立即对值进行排序

//获取元素
列表区域=新的ArrayList(ShowAreas.values());
//分类
收集、分类(区域);
//还他们
返回区;
注意:如果要使用此方法,类
区域
必须实现
可比


最后一条建议:不要将与数据库交互的代码放在负责接收外部REST调用的类中。您违反了单一责任原则,您的应用程序将很快无法维护。尝试使用结构控制器-服务-存储库。

确保您在正确的字段上排序;查看代码,您似乎正在尝试按升序对AreaName排序是的,Areas Table中只有两个字段AreaID和AreaName我的代码运行良好,并以json格式@Masud显示数据,但我只想按升序显示所有内容为什么您的方法返回类型
ArrayList我不知道有关泛型的更多信息,我在Internet上提供的一些教程的基础上尝试此方法。第二个解决方案出现错误,我正在尝试实现TreeSet解决方案,谢谢。我编辑了我的答案:我编写了
Collection.sort
,但正确的拼写是
Collections.sort
。这个方法的错误是什么?那么方法的返回类型应该是什么?回答编辑的代码片段和类型
区域的提示。
// Get the elements
List<Areas> areas = new ArrayList<Areas>(ShowAreas.values());
// Sort them
Collections.sort(areas);
// Return them
return areas;