5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PERSOL CROSS TECHNOLOGYAdvent Calendar 2024

Day 15

Backlog APIで取得した課題をBacklog APIで登録しようとしたら "Incorrect String..."と怒られてしまいました😢

Last updated at Posted at 2024-12-23

小ネタで恐縮ですがややハマったので書き残しておきます。

さる事情でBacklogテナントAからBacklogテナントBへとプロジェクトの課題(Issue)をマイグレーションする作業をしていた折、遭遇した問題です。

Problem

Backlog4jを利用しマイグレーション(データコピー)のためのツールを作成。
テナントAのプロジェクトの課題を取得し、テナントBのプロジェクトの課題として登録しようとしたところエラーになった。

ステータスコードは400。メッセージは:

Incorrect String: %F0...

チケットをよく見たところ「課題の詳細」(Description)のテキストに絵文字(📋️)が含まれている。

Solution

課題を登録するロジックで 課題の詳細のテキストから絵文字を除去する(あるいは他の文字に置換する):

final String description = "..."; // Backlog APIで取得した課題の詳細(絵文字を含み得る)

final Pattern emojiPattern = Pattern.compile("[\\p{So}\\p{Cn}]");
final Matcher emojiMatcher = emojiPattern.matcher(description);
final String emojilessDescrption = emojiMatcher.replaceAll(""); // 絵文字を除去

final CreateIssueParams newIssue = new CreateIssueParams(...);
newIssue.description(emojilessDescrption); // 課題の登録用パラメータに設定

Backlogはブラウザでアクセスする画面では絵文字を受け付ける。Backlog4jが利用するBacklog APIも、データを取得する要求に対してはその絵文字を含んだテキストを返してくる。しかしデータを登録する要求に対しては絵文字を含んだテキストを受け付けずエラーを返してくる。 Backlogにはドメインが複数ある。backlog.comでホストされたテナントでは📋️をはじめ多くの絵文字が利用可能なようだが、 backlog.jpでホストされたテナントでは📋️や👍️は利用不可(一方で✨️などは利用可)。ヌーラボに問い合わせたところこれは「仕様」とのこと(2024/12/25:原因について訂正)。
やや憮然とさせられてしまう動作だが致し方ない。絵文字を除去する。

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?