下面是我的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();
}
}
是的,每個請求將被一個新的單獨的實例處理,因此,它會重新計算每次它。 – user2004685
謝謝!你可以添加這個答案,以便我可以接受它嗎? – pholtz
添加它作爲答案。 – user2004685