В этой статье я покажу Вам, как сделать так, что REST API Browser будет показывать, что Ваш POST REST метод принимает на вход application/json в плагинах для Jira Server/ Data Center.
Проблема
Давайте создадим новый плагин для Jira Server через Atlassian SDK и добавим REST plugin модуль. По умолчанию файл src/main/java/ru/matveev/alexey/atlassian/tutorial/rest/MyRestEndpoint.java будет выглядеть вот так:
@Path("/message")
public class MyRestEndpoint {
@GET
@AnonymousAllowed
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response getMessage()
{
return Response.ok(new MyRestEndpointModel("Hello World")).build();
}
}
У нас получился GET REST метод. Поменяем его на POST:
@Path("/message")
public class MyRestEndpoint {
@POST
@AnonymousAllowed
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response postMessage(String body)
{
return Response.ok(new MyRestEndpointModel(body)).build();
}
}
Я поменял аннотацию @GET на @POST и добавил параметр, в который передается тело запроса. Далее сделал так, что метод возвращает тело запроса, как результат.
Теперь упакуем плагин и запустим его в Jira.
После того, как Jira стартанула, идем в REST API Browser и находим наш POST метод.

Как Вы видите, в поле Representation у нас значение */*, а мы хотим application/json.
Давайте еще сделаем по-другому.
Я добавил файл src/main/java/ru/matveev/alexey/atlassian/tutorial/rest/MyRequestBody.java:
@Data
public class MyRequestBody {
String value;
}
Затем изменил наш POST метод на вот такой:
@Path("/message")
public class MyRestEndpoint {
@POST
@AnonymousAllowed
@Produces({MediaType.APPLICATION_JSON})
public Response postMessage(MyRequestBody body)
{
return Response.ok(new MyRestEndpointModel(body.getValue())).build();
}
}
Как Вы видите, я изменил тип параметра body со String на MyRequestBody, что означает, что теперь нам нужно передавать json вот в таком виде:
{"value": "Hello World"}
Выполним наш POST метод.

У нас ошибка 415, которая означает Unsupported Media Type. И все правильно, мы должны передать в качестве Content-Type application/json, а у нас */*. И мы не можем его поменять.
Решение
Нужно добавить аннотацию @Consumes в POST метод:
@Path("/message")
public class MyRestEndpoint {
@POST
@AnonymousAllowed
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public Response postMessage(MyRequestBody body)
{
return Response.ok(new MyRestEndpointModel(body.getValue())).build();
}
}
Я добавил вот такую строчку
@Consumes({MediaType.APPLICATION_JSON})
Теперь пересобираем проект и смотрим результат.

Все работает. Мы можем выбрать application/json и наш POST метод возвращает результат.