2016-03-15 50 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

回答