2017-04-12 1 views
0

Je suis en mesure de retourner un JSONP d'un objet java personnalisé sans problèmes (après ceci: http://www.concretepage.com/spring-4/spring-4-mvc-jsonp-example-with-rest-responsebody-responseentity), mais lorsque je tente de retourner une chaîne withing la JSONP la fonction d'emballage disparaitSpring - Retour chaîne ou JSONObject dans JSONP

ce que je fais:

@RequestMapping(value ="/book", produces = {MediaType.APPLICATION_JSON_VALUE, "application/javascript"}) 
    public @ResponseBody ResponseEntity<String> bookInfo() { 
    JSONObject test = new JSONObject(); 
    test.put("uno", "uno"); 
    return new ResponseEntity<String>(test.toString(), HttpStatus.OK); 
} 

appel au service:

http://<server>:port//book?callback=test 

Retours:

{"uno":"uno"} 

Résultat attendu:

test({"uno":"uno"}) 

a également tenté de retourner directement le JSONObject ResponseEntity.accepted().body(test); mais je m'y suis une erreur 406. Des idées?

Répondre

1

L'erreur ressemble à la classe JsonpAdvice de this example, n'est pas disponible pour le mappage de la demande.

@ControllerAdvice 
public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice { 
    public JsonpAdvice() { 
     super("callback"); 
    } 
} 

J'utilisé HashMap, car il a une utilisation similaire ici et HashMap est plus simple à utiliser dans cet exemple:

@RequestMapping(value="/book", produces=MediaType.APPLICATION_JSON) 
public ResponseEntity<Map> bookInfo() { 
    Map test = new HashMap(); 
    test.put("uno", "uno"); 
    return ResponseEntity.accepted().body(test); 
} 

Cela m'a fourni le résultat:

// http://localhost:8080/book?callback=test 

/**/test({ 
    "uno": "uno" 
}); 

J'utilisais le soufflet de ressort:

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.5.1.RELEASE</version> 
</parent> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-jersey</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>javax.ws.rs</groupId> 
     <artifactId>javax.ws.rs-api</artifactId> 
     <version>2.0</version> 
    </dependency> 
</dependencies> 
+0

I tr ied, mais quand je retourne le JSONObject la réponse est un code d'erreur 406 – EsteBusta

+0

J'ai eu la même erreur quand je n'avais pas la classe 'JsonpAdvice' dans mon chemin de classe. Une fois cela fait, j'ai commencé à avoir 500 erreurs, car je n'ai pas configuré Spring pour sérialiser JSONObject. Donc je suis passé à HashMap, qui est facilement converti en Json. L'exemple déclare spécifiquement le type. Je mettrai à jour ma réponse pour contenir ceci. – James

+0

Merci, en fait passer à la HashMap était la façon dont je l'ai utilisé, je recherche un peu plus et réalise que le JSONObject ne peut pas sérialiser comme vous le mentionnez, merci! – EsteBusta