@wikiwana

Java, REST, Jersey: почему @QueryParam не захватывает значения для POST запроса, всегда null?

С помощью расширения RESTer передаю POSTом вот такой json:
{
  "title": "1_title",
  "text": "JSON!!!!"
}

В ответ ничего, @QueryParam не захватывает значения из json метки, они попросту null.
Если я совсем дурак, не ругайте, окунулся в это все 1 раз по необходимости :(

Вот кусок кода:
@Path("/")
public class Rest {

    private ArrayList<Note> notes = new ArrayList<Note>();
    
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public String getNotes(){
    	if (!notes.isEmpty())  		
    		return notes.get(0).toJson().toString();
    	else
    		return null;
    }
    
    @POST
    @Produces(MediaType.APPLICATION_JSON)
    public void postNote(@QueryParam("title") String title, @QueryParam("text") String text){
        notes.add(new Note(title, text));
    }
}

Делаю в Eclipse, сервер TomCat 8.5
Не знаю нужен или нет, на всякий, вот web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  
  <servlet>
        <servlet-name>Notes RestAPI</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>wkwn</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Notes RestAPI</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>
  • Вопрос задан
  • 424 просмотра
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Java
Седой и строгий
Если в классе Note есть геттеры и сеттеры для title и text, то всё гораздо проще:
@Path("/")
public class Rest {

    private ArrayList<Note> notes = new ArrayList<Note>();
    
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    public void postNote(Note note) {
        notes.add(note);
        ...
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы