Служба JAX-RS + RESTEasy возвращает строку JSON без двойной кавычки - PullRequest
2 голосов
/ 09 октября 2011

Я новичок в JAX-RS + RESTEasy

Что мешает мне, так это то, что служба возвращает строку JSON без двойных кавычек.

@Path("/hello")
public class HelloService {

    @GET
    @Path("say")
    @Produces(MediaType.APPLICATION_JSON)
    public String say() {
        return "Hello";
    }
}

Когда я звоню "/ привет / говорю", он просто возвращает Привет но я ожидаю "Привет"

Погуглил несколько дней. У меня есть фрагмент Javascript, использующий JQuery, который вызывает службу, как это:

$(function(){
    $.ajax({
            url : "services/hello/say",
            context : $('#message'),
            success : function(data){
                    $(this).html(data);
                },
            error : function(xhr, ajaxOptions, thrownError){
                    $(this).html(xhr.status + "<br>" + thrownError);
                }   
        });
    });

И это результат

SyntaxError: Unable to parse JSON string

Хотя статус 200. Есть ли способ решить эту проблему вместо ручного добавления двойных кавычек в строку?

Ответы [ 3 ]

4 голосов
/ 09 октября 2011

Какую реализацию JSON вы используете вместе с RESTeasy, Jettison или Jackson?


Только что попробовал с Jettison, та же проблема.Я только что посмотрел на спецификацию JSON, и там написано, что само значение не является допустимым ответом JSON (см. http://www.json.org/).. У вас есть объект или массив значений.

Iдумаю, это может быть проблемой, поскольку RESTeasy не уверен, что делать, так как вы не возвращаете Object, более того, единственный тип (например, String, Integer, ...).

Интересно, что произойдет, если кто-то вернетмассив.

3 голосов
/ 10 октября 2011

Проблема не в фреймворке, а в вашем коде.Согласно JAX-RS сигнатура метода public String say() указывает, что строка, которую вы возвращаете из метода, является сущностью, которая должна быть возвращена в ответе.Дальнейшая обработка не производится.Я бы связал соответствующие документы, но jcp.org, где они использовались вживую, похоже, пропал.Если вы хотите, чтобы ваш RESTEasy выполнял маршалинг JSON для вас, вам нужно вернуть POJO.

1 голос
/ 12 октября 2013

Я бы предложил вам использовать JSON-провайдера Jackson. Вам просто нужно добавить resteasy-jackson-provider.jar в ваш путь сборки проекта. Назначьте аннотацию @ Produces ("application / json") для вашего метода в вашей бизнес-службе. И ты готов к работе. Ура !!!

...