Неподдерживаемый тип носителя (415) для POST-запроса к службе Restlet

Я POST к конечной точке, как показано ниже:

import java.util.logging.Level;

import org.json.JSONException;
import org.json.JSONObject;
import org.restlet.ext.json.JsonRepresentation;
import org.restlet.representation.Representation;
import org.restlet.resource.Post;
import org.restlet.resource.ServerResource; 



           try {
                JSONObject jsonToCallback = AcceptorManager.getJsonFromClient();
                String test = jsonToCallback.getString("test");
                String st2 = jsonToCallback.getString("st2");
                ClientResource clientResource = new ClientResource(callback);
                clientResource.setMethod(Method.POST);
                Form form = new Form ();
                form.add("key1", val1);
                form.add("key2", "stat");
                Representation representation = clientResource.post(form, MediaType.APPLICATION_JSON);
           } catch (Exception e) {
                //Here I get "Unsupported Media Type (415) - Unsupported Media Type"
           }

А это конечная точка:

public class test extends ServerResource{
    @Post
    public JSONObject testPost(JSONObject autoStackRep) throws JSONException, AcceptorException {
        JSONObject json=new JSONObject();
        try {
            json.put("result",false);
            json.put("id",1);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return json;
    }
}

Как я могу решить эту проблему?


person AJ-B29    schedule 04.05.2015    source источник
comment
Пожалуйста, укажите, какая библиотека содержит аннотацию @Post (не @POST). Это AndroidAnnotations (наиболее близкий, который я нашел до сих пор)?   -  person fori1ton    schedule 04.05.2015
comment
Спасибо @fori1ton. Я отредактировал свой вопрос. его форма рестлет.   -  person AJ-B29    schedule 04.05.2015


Ответы (1)


Передача JSONObject в качестве входного параметра вашего метода POST не означает, что он принимает appication/json. Restlet имеет несколько способов указания принятого Media-Type. Вы можете указать его в @Post такая аннотация:

@Post("json")
public Representation testPost(Representation autoStackRep)

Если предоставлено только одно расширение, расширение применяется как к объектам запроса, так и к объектам ответа. Если предоставлены два расширения, разделенные двоеточием, то первое предназначено для объекта запроса, а второе — для объекта ответа. Обратите внимание, что тип параметра теперь Representation. Вы можете использовать метод Representation.getText() для получения содержимого объекта ответа. Вы также можете указать POJO в качестве типа параметра:

@Post("json")
public MyOutputBean accept(MyInputBean input)

В этом случае вам нужно расширение Джексона, чтобы иметь возможность сопоставлять JSON с POJO и наоборот. Просто убедитесь, что org.restlet.ext.jackson.jar находится в вашем пути к классам. Вы можете опустить объявление типа мультимедиа при использовании POJO в качестве параметра, в этом случае Restlet попытается применить все доступные конвертеры к входному потоку, чтобы сопоставить его с вашим POJO.

person fori1ton    schedule 05.05.2015