2014-09-10 2 views
-1

RestTemplate을 사용하여 URL을 실행 한 다음 http 상태 코드를 출력하고 있습니다.각 http 상태 코드를 효율적으로 계산하는 방법은 무엇입니까?

ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, null, String.class); 
System.out.println(response.getStatusCode()); 

이제 각 상태 코드의 개수를 얻고 키와 값으로 저장해야합니다. 의미, 각 상태 코드가 몇 번 올지. http 200 상태 코드가 약 100 번 나오면 그 수를보고 싶습니다.

각 상태 코드에 대해 여러 개의 임시 변수를 사용하고 그에 따라 개수를 늘리면됩니다. 그러나 이것과는 별도로 다른 방법으로 쉽게 할 수 있습니까?

답변

1

아마도 Map을 사용 하시겠습니까? 상태를 키로, 값을 카운터로 사용하십시오.

Map<String,Integer> counters = new HashMap<>(); 
... 
synchronized (counters) { 

    String code = response.getStatusCode(); 
    Integer counter = counters.get(code); 

    if (counter == null) { 
    counters.put(code, 1); 
    } else { 
    counters.put(code, counter + 1) 
    } 
} 
+0

그건 내 질문에서 언급 한 것입니다. 얼마나 많은 HTTP 상태 코드에 따라 몇 가지 임시 변수를 가질 수 있으며 그에 따라 카운트를 계속 증가시킬 수 있습니다. 그러나 다른 쉬운 방법이 있습니다. 그게 내 질문 이었어. – john

+0

'Map'을 사용하면 단 하나의 "temp"변수 만 갖게됩니다. 나는 그보다 더 간단하다고 생각하지 않는다. 나는 작은 답을 사용하여 나의 대답을 업데이트하려고 노력할 것이다. –

0
Map<Integer,Integer> statusMap = new HashMap<Integer,Integer>(); 

public void store(int code) 
{ 
    if (statusMap.containsKey(code)) 
    { 
     int value = statusMap.get(code); 
     statusMap.put(code,value+1); 
    } 
    else 
    { 
     statusMap.put(code,1);  
    } 
} 

public void list() 
{ 
    Iterator<Integer> iter = statusMap.keySet().iterator(); 
    while(iter.hasNext()) 
    { 
     int code = iter.next(); 
     System.out.println(code + " : " + statusMap.get(code)); 
    } 
} 
0

HashMap 사용 후 : 당신의 httpcode지도에없는했다 경우 httpcode이 이미 존재하는 경우

  • , 계수 = 1
  • 로 삽입 지도를 증가한 다음 카운터를 늘립니다.

    HashMap<Integer, Integer> mapCount = new HashMap<Integer, Integer>(); 
    
    // ... 
    
    void updateMap(Integer httpCode) { 
        if (!mapCount.containsKey(httpCode)) { 
         mapCount.put(httpCode, 1); 
        } else { 
         // update counter 
         int counter = mapCount.get(str).intValue() + 1; 
         // overwrite existing with update counter 
         mapCount.put(httpCode, counter + 1); 
        } 
    } 
    
    // ... 
    
0

실제로 다른 방법을 요구하기 때문에 수신 된 HTTP 코드를 나타내는 int 배열의 인덱스가있는 int 배열을 사용할 수 있습니다. 같은

뭔가 :

// initialization 
int[] responses = new int[600]; 

// for each received response 
responses[response.getStatusCode().value()]++ 

// retrieving the number of HTTP 200 received 
System.out.println("Number of HTTP 200 received : " + responses[HttpStatus.OK.value()] /* or simply responses[200] */); 

즉 비록 테이블에 가져다 무엇인지 확실하지 : 조금 더 빠른 경우에도, 낭비 끝날 것이라고 배열의 int 많은 확실히있다. 다른 대답은 Map 접근 방식에 대해 자세히 설명합니다. 특정 방식으로 특정 HTTP 상태 코드의 발생 횟수를 세지려고 할 때 더 명확하게 나타 내기 때문에 더 나은 imho입니다. 그리고 코드를 작성할 때 명확성이 중요합니다.

관련 문제