theonedev/onedev · error · NotAcceptableException

Invalid issue number: {0}

Error message

Invalid issue number: {0}

What it means

IssueDetailPage parses the issue number from the page parameters; when the string cannot be parsed as a Long it throws NotAcceptableException with this message. This happens before any database lookup, so it is purely a parameter-format validation error.

Source

Thrown at server-core/src/main/java/io/onedev/server/web/page/project/issues/detail/IssueDetailPage.java:114

	
	public IssueDetailPage(PageParameters params) {
		super(params);
		
		String issueNumberString = params.get(PARAM_ISSUE).toString();
		if (StringUtils.isBlank(issueNumberString)) {
			throw new RestartResponseException(ProjectIssueListPage.class, 
					ProjectIssueListPage.paramsOf(getProject(), null, 0));
		}
		
		issueModel = new LoadableDetachableModel<Issue>() {

			@Override
			protected Issue load() {
				Long issueNumber;
				try {
					issueNumber = Long.valueOf(issueNumberString);
				} catch (NumberFormatException e) {
					throw new NotAcceptableException(MessageFormat.format(_T("Invalid issue number: {0}"), issueNumberString));
				}
				
				Issue issue = issueService.find(getProject(), issueNumber);
				if (issue == null) { 
					throw new EntityNotFoundException(MessageFormat.format(_T("Unable to find issue #{0} in project {1}"), issueNumber, getProject()));
				} else {
					issue = issue.resolveMovedTo();
					issueLinkService.loadDeepLinks(issue);
					if (!issue.getProject().equals(getProject())) 
						throw new RestartResponseException(getPageClass(), paramsOf(issue));
					return issue;
				}
			}

		};
	}
	
	public Issue getIssue() {

View on GitHub (pinned to d44925c47c)

Solutions

  1. Use only the numeric issue number in the URL (e.g. /~issues/1234).
  2. If generating links in code, pass Long.toString(issueNumber) rather than a textual issue key.
  3. Check the URL for truncation or accidental non-numeric characters.

Example fix

// before
String url = "/~issues/" + issueKey; // "ABC-12"
// after
String url = "/~issues/" + issue.getNumber(); // "12"
Defensive patterns

Strategy: validation

Validate before calling

if (!issueNumberStr.matches("\\d+")) throw new IllegalArgumentException("Issue number must be numeric: " + issueNumberStr);
Long issueNumber = Long.valueOf(issueNumberStr);

Type guard

Long parseIssueNumber(String s) { try { return Long.valueOf(s); } catch (NumberFormatException e) { return null; } }

Try / catch

try { open(IssueDetailPage.paramsOf(number)); } catch (NumberFormatException e) { log.error("Non-numeric issue number in URL"); }

Prevention

When it happens

Trigger: Visiting an issue detail URL where the number segment is non-numeric, e.g. /~issues/abc instead of /~issues/42; malformed URL generation or path truncation producing a non-numeric issue number.

Common situations: Truncated/corrupted bookmarks; scripts interpolating a string value (e.g. an issue key like 'ABC-12') where a bare number is required; mistyped URLs.

Understand the failure class

Background: "Invalid ... format", "must be in format X", "does not look like a ..." — invalid argument format errors across CLI tools and libraries — this error's family across 17 libraries.

Related errors


AI-assisted analysis of theonedev/onedev@d44925c47c (2026-09-06). Data as JSON: /api/errors/56a0d24eb4509dc7. Report an issue: GitHub.