Comment Accepter JSON entrée dans le Printemps Reposant Webservice?
Je vais avoir du mal à accepter JSON entrée dans mon Printemps Reposant Webservice. Fondamentalement, mon but est d'accepter un JSON et le retour d'un fichier zip. Mais je suis pas capable de franchir la première étape elle-même.
Voici le code du contrôleur
@Controller
@RequestMapping(value = "/request")
public class PasskitController {
@Autowired
@Qualifier("PassManager")
private PassManager pm;
/*headers = { "Accept:application/json" },
consumes = MediaType.APPLICATION_JSON_VALUE,*/
@RequestMapping(value = "/createPass", method = RequestMethod.POST,
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
public @ResponseBody ByteArrayOutputStream createGiftPass(
@RequestBody PassGenerationRequest request) throws IOException {
System.out.println("in createGiftPass() method");
String success = "Success";
ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.write(success.getBytes());
return baos;
}
@RequestMapping(value = "/test", method = RequestMethod.GET,
produces = MediaType.TEXT_PLAIN_VALUE)
public @ResponseBody
String test() throws IOException {
System.out.println("in test() method");
return "Success";
}
}
J'ai besoin de la carte d'entrée JSON en suivant pojo PassGenerationRequest
@JsonAutoDetect
public class PassGenerationRequest {
private String serialNumber;
private String upc;
private String campaign;
private String merchant;
public String getSerialNumber() {
return serialNumber;
}
public void setSerialNumber(String serialNumber) {
this.serialNumber = serialNumber;
}
public String getUpc() {
return upc;
}
public void setUpc(String upc) {
this.upc = upc;
}
public String getCampaign() {
return campaign;
}
public void setCampaign(String campaign) {
this.campaign = campaign;
}
public String getMerchant() {
return merchant;
}
public void setMerchant(String merchant) {
this.merchant = merchant;
}
}
Voici les différentes HttpMessageConverters configuré dans spring-servlet.xml
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jsonMessageConverter" />
<ref bean="byteArrayMessageConverter"/>
<ref bean="stringMessageConverter"/>
</list>
</property>
</bean>
<bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" >
<property name="supportedMediaTypes" value="application/json" />
</bean>
<bean id="byteArrayMessageConverter"
class="org.springframework.http.converter.ByteArrayHttpMessageConverter" >
<property name="supportedMediaTypes" value="application/octet-stream" />
</bean>
<bean id="stringMessageConverter"
class="org.springframework.http.converter.StringHttpMessageConverter" >
<property name="supportedMediaTypes" value="text/plain" />
</bean>
Actuellement, je suis type de Contenu 'text/plain; charset=UTF-8' pas pris en charge exception.
Si j'ajoute le en-tête={"Accept: application/json"} puis-je obtenir de l'exception en disant Aucun gestionnaire trouvés pour la requête "demande/createPass"
Quelqu'un peut m'aider ici?
Grâce.
En fait j'ai été en utilisant le Facteur d'application de poster ma demande.
OriginalL'auteur user2985202 | 2013-11-15
Vous devez vous connecter pour publier un commentaire.
Vérifier votre demande a
Content-Type
ensemble deapplication/json
.Accept
décrit le type de média que vous voulez voir dans le réponse. Vous avez cet ensemble de données binaires, de sorte que lorsque vous fournissez desapplication/json
au lieu de cela, le Printemps ne veut pas voir un match.curl -i -H "Content-Type: application/json" -X POST -d '{"serialNumber":"1234","upc":"12345","campaign":"155950","merchant":"ASDA"}' http://localhost:8080/passkit-service-app-1.0/passkit/request/createPass
Même si je comprend l'en-tête info comme
headers = { "Accept:application/octet-stream" }
qui je crois est applicable si je suis de retour ByteArrayOutputStream il me donne l'erreur HTTP 404 qui n'est d'aucune ressource trouvéQuel est le contexte de votre application web? Par exemple, c'est peut-être
passkit
et l'url doit êtrehttp://localhost:8080/passkit/request/createPass
L'url
http://localhost:8080/passkit-service-app-1.0/passkit/request/test
fonctionne en cas detest()
méthode dans le code ci-dessus. Il ne fonctionne pas pourhttp://localhost:8080/passkit-service-app-1.0/passkit/request/createPass
qui est l'url decreateGiftPass()
méthode. Aussi j'ai essayé la conversiontest()
méthode POST et il a commencé à donner de l'erreur 404. Donc il semble que le problème avec les méthodes POST.Est-ce que je suis absent au printemps-servlet de configuration d'un contrôleur ou d'? Peut-être un contenu de la négociation de vue résolveur (pas sûr si c'est applicable dans ce cas). Est-il un exemple de travail de Repos du Ressort de Webservices JSON comme entrée que vous pouvez m'indiquer.
OriginalL'auteur Vidya
Assurez-vous que Jackson bibliothèque sont dans le chemin de classe de Message convertisseur MappingJacksonHttpMessageConverter est pour les vieux jackson lib avant de rel 2 , après rel 2, vous devez ajouter MappingJackson2HttpMessageConverter,
Aussi u peut supprimer l'annotation gestionnaire de méthode avec de simples "" et avec jackson lib dans le chemin de classe, il détectera automatiquement votre message requis convertisseur.
OriginalL'auteur HKumar
utiliser cette
OriginalL'auteur Ghanshyam Saini