goooodluck
72
2019-10-24 19:23:55 작성 2019-10-24 19:31:52 수정됨
1
270

이중for문을 돌려 json파일 형태로 controller에서 jsp에 전달하려 합니다.


안녕하세요 spring 입문자입니다!

이중for문을 돌려서 json파일 형태로 jsp에 뿌려주기 위한 코드를 만드려고 하는데 원하는 값이 안나와서 질문을 드립니다.

다음과 같이 코드를 실행하면 콘솔에

[{"seat_num" :"a1", "status" :"Y"}, {"seat_num" :"a2", "status" :"Y"}, {"seat_num" :"a3", "status" :"Y"}]

[{"seat_num" :"b1", "status" :"Y"}, {"seat_num" :"b2", "status" :"Y"}]

[{"seat_num" :"c1", "status" :"Y"}, {"seat_num" :"c2", "status" :"Y"}]


이 나오는데 
main에서 seats에는 a1, a2, b1이 있기 때문에 비교해서 있는 값들은 status를 N으로 변경하려고 하는데 어떤 로직이 자꾸 틀리는지.... 값이 제대로 나오지 않습니다ㅠㅠ
저는 다음과 같은 값을 원합니다!

[{"seat_num" :"a1", "status" :"N"}, {"seat_num" :"a2", "status" :"N"}, {"seat_num" :"a3", "status" :"Y"}]

[{"seat_num" :"b1", "status" :"N"}, {"seat_num" :"b2", "status" :"Y"}]

[{"seat_num" :"c1", "status" :"Y"}, {"seat_num" :"c2", "status" :"Y"}]


도와주세요 고수님들!!

import java.util.ArrayList;

import java.util.List;

class SeatVO {
   private String seat_num;
   private String status;

   public String getSeat_num() {
      return seat_num;
   }

   public void setSeat_num(String seat_num) {
      this.seat_num = seat_num;
   }

   public String getStatus() {
      return status;
   }

   public void setStatus(String status) {
      this.status = status;
   }

   public SeatVO(String s1, String s2) {
      seat_num = s1;
      status = s2;
   }

   @Override
   public String toString() {
      return "{\"seat_num\" :" + "\""+seat_num +"\""+ ", \"status\" :" + "\""+status +"\""+ "}";
   }
}

//////////////////////////////////////////////////////////////////////////////////////////
class SeatInfo {

   List<SeatVO> list = new ArrayList<>();

   public void setList(List<SeatVO> list) {
      this.list = list;
   }

   public void addSeatVO(SeatVO vo) {
      list.add(vo);
   }

   @Override
   public String toString() {
      return list.toString();
   }

}
///////////////////////////////////////////////

public class b {
   public static void main(String[] args) {

      List<SeatInfo> list = new ArrayList<>();//SeatInfo는 한 줄

      List<String> totalseats = new ArrayList<String>();
      totalseats.add("a1");
      totalseats.add("a2");
      totalseats.add("a3");
      totalseats.add("b1");
      totalseats.add("b2");
      totalseats.add("c1");
      totalseats.add("c2");
      
      List<String> seats = new ArrayList<String>();
      seats.add("a1");
      seats.add("a2");
      seats.add("b1");
      SeatInfo[] s1 = new SeatInfo[totalseats.size()];
      
      char[] ch1;	//totalseats[j].toCharArray();를 하기 위해 변수 선언
      char ch = 'a';

      // 여기서 처리해야 할 것은 String배열의 제일 첫 글자가 a,b,c인지 구분해 addSeatVO하는 것
      
      for (int i = 0; i < 3; i++) {//3을 a,b,c 3가지니까 ... 어떤 변수를 넣어야 할까?
         s1[i] = new SeatInfo();
         
         for (int j = 0; j < totalseats.size(); j++) {
        	 
            ch1 = totalseats.get(j).toCharArray();
            
            if (ch1[0] == ch) {// 만약 첫글자가 ch와 같으면, 1)a 2)b됨..
               s1[i].addSeatVO(new SeatVO(totalseats.get(j), "Y"));
               
            } // if
            
            ch1 = null;// 초기화해줌 
         }//for(j)
         
         list.add(s1[i]);//
         ch++;
         
      }//for(i)
      
      for (SeatInfo i : list) {
         System.out.println(i);
      }
      
       System.out.println("\n\n");
       
    
   
   
   }
}
그리고 제가 한 것이 json으로 데이터 전달해주는 형식이 맞는 것인지도 감이 안옵니다ㅜㅠㅠ 
저렇게 전달하는게 맞을까요..?
0
0
  • 답변 1

  • gofnrk
    209
    2019-10-25 14:55:22

    음.. 프론트단 기획이 어떻게 되어있는지에 따라 방법은 달라질 수 있어요. totalseats와 seats 그냥 그대로 보내주고 jsp에서 처리해도 되는거구요. 방법은 많습니다.


    단순하게 생각해서 말씀드려보면 a, b, c 별로 객체를 묶어서 이중리스트로 보내는 것보다 단순리스트로 a, b, c를 모두 합친 후 정렬해서 보내고 jsp에서 차례대로 꺼내서 처리하는게 좋지 않을까 생각됩니다.


    아래 돌려보시면 원하는 값 나올거에요. ObjectMapper는 단순히 json을 이쁘게 보실 수 있도록 했으니 실제로 controller에서 리턴할 때는 list를 넘겨주면 되요. SeatInfo는 없어도 될 것 같아요.


    public class b {
    	public static void main(String[] args) {
    
    		List<String> totalseats = new ArrayList<String>();
    		totalseats.add("a1");
    		totalseats.add("a2");
    		totalseats.add("a3");
    		totalseats.add("b1");
    		totalseats.add("b2");
    		totalseats.add("c1");
    		totalseats.add("c2");
    
    		List<String> seats = new ArrayList<String>();
    		seats.add("a1");
    		seats.add("a2");
    		seats.add("b1");
    
    		List<SeatVO> list = new ArrayList<>();
    		totalseats.forEach((totalseat) -> {
    			if (seats.contains(totalseat)) {
    				list.add(new SeatVO(totalseat, "N"));
    			} else {
    				list.add(new SeatVO(totalseat, "Y"));
    			}
    		});
    
    		String print = new ObjectMapper().convertValue(list, JsonNode.class).toPrettyString();
    		System.out.println(print);
    	}
    }


    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.