Java json输出不符合排序顺序
我已经用JavaNetBeans创建了web服务,并通过RESTWeb服务调用了MySQL数据 编辑代码: For循环按排序顺序显示所有区域,那么为什么作为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
@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;