Wildfly JAX-RS вопрос о продуктах

1

Я попробовал официальные образцы. И пытаясь использовать:

curl http://localhost:8080/wildfly-helloworld-rs/rest/ -H 'accept:application/xml'
curl http://localhost:8080/wildfly-helloworld-rs/rest/ -H 'accept:application/json'

Оба запроса возвращают мне xml-представление:

<xml><result>Hello World!</result></xml>

Я даже пытался добавить это:

@GET
@Path("/")
@Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.TEXT_PLAIN)
public String getHelloWorldText() {
    return  helloService.createHelloMessage("World");
}

Он в любом случае всегда возвращает xml-представление.

EDIT: из связанного примера

@Path("/")
public class HelloWorld {
    @Inject
    HelloService helloService;

    @GET
    @Path("/")
    @Produces({ "application/json" })
    public JsonObject getHelloWorldJSON() {
        return Json.createObjectBuilder()
                .add("result", helloService.createHelloMessage("World"))
                .build();
    }

    @GET
    @Path("/")
    @Produces({ "application/xml" })
    public String getHelloWorldXML() {
        return "<xml><result>" + helloService.createHelloMessage("World") 
                               + "</result></xml>";
    }
}

public class HelloService {
    String createHelloMessage(String name) {
        return "Hello " + name + "!";
    }
}
Теги:
rest
jax-rs
wildfly
wildfly-8

1 ответ

3
Лучший ответ

Это не столько проблема с JAX-RS, сколько с cURL. Если я запустил команду с -v переключателя -v (verbose), я увижу заголовки запроса

C:\temp\jboss\quickstart\helloworld-rs>curl 
                         -v http://localhost:8080/wildfly-helloworld-rs/rest/ 
                         -H 'accept:application/xml'
* Adding handle: conn: 0x4b6208
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x4b6208) send_pipe: 1, recv_pipe: 0
* About to connect() to localhost port 8080 (#0)
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /wildfly-helloworld-rs/rest/ HTTP/1.1
> User-Agent: curl/7.30.0
> Host: localhost:8080
> Accept: */*
> 'accept:application/xml'
>
< HTTP/1.1 200 OK
< Connection: keep-alive
< X-Powered-By: Undertow/1
* Server WildFly/8 is not blacklisted
< Server: WildFly/8
< Content-Type: application/json
< Content-Length: 25
< Date: Sun, 23 Nov 2014 03:00:56 GMT
<
{"result":"Hello World!"}* Connection #0 to host localhost left intact

C:\temp\jboss\quickstart\helloworld-rs>

Вы можете видеть, что я получаю JSON, когда я использовал accept:application/xml

Взгляните на заголовок Accept. Это */* (Вы можете увидеть accept:application/xml ниже, который не используется. При этом, когда запрос неоднозначен, с точки зрения соответствия нашим методам ресурсов, результаты непредсказуемы. Со мной я всегда получаю JSON.

Я не большой пользователь cURL, поэтому я не уверен, как должен работать коммутатор -H, и он работает под управлением, но для меня ' одиночные кавычки не работают" и accept не автоматически заглавные буквы ( должен быть Accept).

Поэтому используйте -H "Accept:application/json", он должен работать. Используйте переключатель -v чтобы просмотреть заголовки.

  • 1
    Интересно, ведь эта проблема только на окнах. В Ubuntu я могу написать запрос с 'в -H, и это работает. Во всяком случае, TNX, нет, это работает)
  • 0
    Я имею ввиду сейчас" (:
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню