Модуль REST гаджета JIRA не вернет значение

Я пытаюсь разработать гаджет Atlassian JIRA, который будет получать значения из файлов .java с помощью модуля REST. Чтобы справиться с этим, я прочитал документацию JIRA (для REST, гаджетов и многих других) и взял примеры. Итак, я получил следующий код:

gadget.xml:...

   <Content type="html" view="profile">
   <![CDATA[
#requireResource("com.atlassian.jira.gadgets:common")
#includeResources()

<script type="text/javascript">
    (function () {
        var gadget = AJS.Gadget({
            baseUrl: "__ATLASSIAN_BASE_URL__",
            useOauth: "/rest/gadget/1.0/currentUser",
            view: {
                   template: function(args) {
          var gadget = this;       
          var userDetails = AJS.$("<h1/>").text("Hello, "+args.fred.firstName);       
          gadget.getView().html(userDetails);
            },
                  args: [{
                        key: "fred",
                        ajaxOptions: function() {
                            return {
                                url: "/rest/My_Dashboard/1.0/users"
                            };
                        }
                    }]
            }
        });
    })();
</script>
]]>

RestHelloWorldService.java:

package com.atlassian.jira.plugin.tutorial;

import com.atlassian.jira.plugin.tutorial.*;
import javax.ws.rs.*;
import javax.ws.rs.core.*;

@Path("/")
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public class RestHelloWorldService { 
    @GET
    @Path("users")
    public Response getUncompletedUsers() {
        return Response.ok(new User("Fred","Bloggs")).build();
    }
}

И User.java:

package com.atlassian.jira.plugin.tutorial;

import com.atlassian.jira.plugin.tutorial.*;
import javax.xml.bind.annotation.*;


@XmlRootElement
public class User
{
    @XmlElement
    private String firstName;

    @XmlElement
    private String lastName;

    // This private constructor isn't used by any code, but JAXB requires any
    // representation class to have a no-args constructor.
    private User() { }

    public User(String firstName, String lastName)
    {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}

СТРОЙ УСПЕХ!

Но мой гаджет все равно ничего не показывает. И данные находятся по адресу URL:

<user>
<firstName>Fred</firstName>
<lastName>Bloggs</lastName>
</user>

Что может быть не так? У меня нет идей...

2 ответа

Решение

Нашел проблему!

Мне пришлось добавить две строки в gadget.xml, чтобы установить для contentType и dataType значение JSON:

...args: [{
         key: "fred",
         ajaxOptions: function() {
                            return {
                                url: "/rest/My_Dashboard/1.0/users", 
                                contentType: "application/json",
                                dataType: "json",
                            };
                        }
                    }]

В любом случае, спасибо за ответ!

Я могу порекомендовать вам указать путь к ресурсу REST, как показано в примере ниже, и тип MIME как MediaType.TEXT_HTML,

@Path("/users")
@AnonymousAllowed
public class RestHelloWorldService { 
    @GET        
    @Produces(MediaType.TEXT_HTML)
    public Response getUncompletedUsers() {
        return Response.ok(new User("Fred", "Bloggs")).build();
    }
}

Смотрите также:

Другие вопросы по тегам