Вот мое 'заключительное эмпирическое правило'.
я использую:
, Выдерживает сравнение с предыдущим ответом, это - ясное объяснение (на который может согласиться или не согласиться) для использования одного или другого (или оба) вид исключений.
Для обоих из тех исключений, я создам свою собственную и контролируемую исключительную ситуацию непроверенную для моего приложения (хорошая практика, , как упомянуто здесь ), за исключением очень общего исключения непроверенного (как NullPointerException)
Так, например, цель этой конкретной функции ниже состоит в том, чтобы сделать (или добраться, если уже существуют), объект,
значение:
Пример:
/**
* Build a folder.
* Folder located under a Parent Folder (either RootFolder or an existing Folder)
* @param aFolderName name of folder
* @param aPVob project vob containing folder (MUST NOT BE NULL)
* @param aParent parent folder containing folder
* (MUST NOT BE NULL, MUST BE IN THE SAME PVOB than aPvob)
* @param aComment comment for folder (MUST NOT BE NULL)
* @return a new folder or an existing one
* @throws CCException if any problems occurs during folder creation
* @throws AssertionFailedException if aParent is not in the same PVob
* @throws NullPointerException if aPVob or aParent or aComment is null
*/
static public Folder makeOrGetFolder(final String aFoldername, final Folder aParent,
final IPVob aPVob, final Comment aComment) throws CCException {
Folder aFolderRes = null;
if (aPVob.equals(aParent.getPVob() == false) {
// UNCHECKED EXCEPTION because the caller failed to live up
// to the documented entry criteria for this function
Assert.isLegal(false, "parent Folder must be in the same PVob than " + aPVob); }
final String ctcmd = "mkfolder " + aComment.getCommentOption() +
" -in " + getPNameFromRepoObject(aParent) + " " + aPVob.getFullName(aFolderName);
final Status st = getCleartool().executeCmd(ctcmd);
if (st.status || StringUtils.strictContains(st.message,"already exists.")) {
aFolderRes = Folder.getFolder(aFolderName, aPVob);
}
else {
// CHECKED EXCEPTION because the callee failed to respect his contract
throw new CCException.Error("Unable to make/get folder '" + aFolderName + "'");
}
return aFolderRes;
}
Я бы тоже использовал 503 в сочетании с заголовком Retry-After. Настоящий робот должен знать, как с этим справиться.
302 Found , вероятно, будет классическим способом, а не постоянным перенаправлением. Однако вы хотите, чтобы это было временно, поэтому, когда паук вернется, он попробует это снова, но в этот раз он должен вернуться. 301 означает, что не нужно переходить к оригиналу.
500 серия - это ошибки, а не то, что вы хотите указать.