2016-03-15 51 views
1

下面是我的Spring RestController實現的通用版本。它的目的是用基於URI ID輸入的資源在特定的基本URI(「/ rest/my/uri/to/resource」)上響應HTTP請求。它工作正常,但由於它返回的數據結構,我不得不添加一個可選的日期參數。我有控制器計算今天的日期,並在用戶沒有在URI中提供一個時在我的數據庫查詢中使用它。Spring Rest控制器日期計算

我給你的問題是,如果我爲每個響應中的用戶沒有提供日期的每個響應使用todaySqlDate變量,它會在每次響應請求時重新計算日期嗎?很明顯,如果用戶輸入日期類似

/rest/my/uri/to/resource/identifier/666?date=2016-03-15 

這不會是一個問題。我擔心的是,如果不包括日期,那麼它將使用默認日期。如果日期不包括在內,那麼它將使用默認日期。如果服務運行超過24小時,默認日期會停止爲最新狀態嗎?

@RestController 
@RequestMapping(value = "/rest/my/uri/to/resource") 
public class ResourceController 
{ 

    private static final Logger LOGGER = LoggerFactory.getLogger(ResourceController.class); 

    @Autowired 
    private ResourceService resourceService; 

    public String todaySqlDate = getTodaySqlDate(); 


    @RequestMapping(value = "/identifier/{id}", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE}) 
    public Resource getResource(@PathVariable("id") String id, 
           @RequestParam(value="date", defaultValue="", required=false) String resourceDate) 
           throws InvalidParameterException, DataNotFoundException, Exception 
    { 

     LOGGER.trace("In ResourceController.getResouce() with {}", id); 

     try 
     { 
      if(!isValidIdentifier(id)) 
      { 
       throw new InvalidParameterException("id is not valid: " + id); 
      } 

      if(resourceDate.isEmpty()) 
      { 
       resourceDate = todaySqlDate; 
      } 
      else if(!isValidSqlDateString(resourceDate)) 
      { 
       throw new InvalidParameterException("resourceDate is present but not valid: " + resourceDate); 
      } 

      ResourceList resourceList = resourceService.getResource(id, resourceDate); 

      if (resourceList == null) 
      { 
       LOGGER.trace("No resources found for given input"); 
       throw new DataNotFoundException("ResourceList for " + id + " not found"); 
      } 

      return resourceList; 
     } 
     catch (Exception e) 
     { 
      LOGGER.error(e.getMessage(), e); 
      throw e; 
     } 

    } 

    public String getTodaySqlDate() 
    { 
     java.util.Date utilDate = new java.util.Date(); 
     java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime()); 
     return sqlDate.toString(); 
    } 
} 
+1

是的,每個請求將被一個新的單獨的實例處理,因此,它會重新計算每次它。 – user2004685

+0

謝謝!你可以添加這個答案,以便我可以接受它嗎? – pholtz

+0

添加它作爲答案。 – user2004685

回答