У меня есть приложение, и я хочу, чтобы принимать как XML и JSON, это мой POJOJSON демаршаллинга с помощью JAXB
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
// Class to marshall and unmarshall the XML and JSON to POJO
// This is a class for the request JSON and XML
@XmlRootElement
public class KeyProvision {
private String Consumer ;
private String API ;
private String AllowedNames ;
public void setConsumer(String Consumer)
{
this.Consumer= Consumer;
}
public void setAPI(String API){
this.API = API;
}
public void setAllowedNames(String AllowedNames){
this.AllowedNames = AllowedNames;
}
@XmlElement(name="Consumer")
public String getConsumer(){
return Consumer;
}
@XmlElement(name="API")
public String getAPI(){
return API;
}
@XmlElement(name="AllowedNames")
public String getAllowedNames(){
return AllowedNames;
}
}
Мой интерфейс Остальное
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@POST
@Path("/request")
@Consumes({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
public Response getRequest(KeyProvision keyInfo){
/* StringReader reader = new StringReader(keyInfo); // this code just leads to an execution failure for some reason
try{
JAXBContext jaxbContext = JAXBContext.newInstance(KeyProvision.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
KeyProvision api = (KeyProvision) jaxbUnmarshaller.unmarshal(reader);
System.out.println(api);
} catch(JAXBException e){
e.printStackTrace();
}
*/
String result = "Track saved : " + keyInfo;
return Response.status(201).entity(result).build() ;
// return "success" ;
}
мой XML является
<?xml version="1.0" encoding="UTF-8"?>
<KeyProvision>
<Consumer> testConsumer </Consumer>
<API>posting</API>
<AllowedNames> google</AllowedNames>
</KeyProvision>
мой JSON:
{
"KeyProvision": {
"Consumer": "testConsumer",
"API": "posting",
"AllowedNames": "google",
}
}
Мои проблемы/вопросы
1) Я постоянно получаю 415 ошибку, когда я использую JSON, почему это не демаршаллизации правильно?
мои зависимостей
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.8</version>
</dependency>
настроить заголовок как Content-Type:application/json
415 является медиа не поддерживается, вы настройки типа контента в вашем запросе? – csn
Когда вы пытаетесь использовать Json у клиента - вы устанавливаете заголовок Accept на «application/json» - потому что ваш заказ по умолчанию - xml сначала, а затем json - поэтому, если вы специально не спросите json, класс ресурсов по умолчанию будет равен xml. – mikemil
@mikemil да, я устанавливаю заголовок в application/json. Infact Я знаю, что он принимает это, потому что, если я изменю метод, чтобы принять строку вместо объекта, я могу видеть запрос как String.Есть проблема с unmarshalling – user1801279