Неподдерживаемый тип носителя (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;
}
}
Как я могу исправить эту проблему?
1 ответ
Переходя JSONObject
как входной параметр вашего метода POST не позволяет принять его appication/json
, Рестлет имеет несколько способов указания принятого 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.