HTTP État 400 - Requis paramètre de Chaîne 'walletName' n'est pas présent

Je travaille avec Java/Spring MVC RESTful app et obtenir 400 HTTP status error tout en faisant un POST demande. Le @RestController méthode est fournie,

@RequestMapping(value = "/generateAddress", method = RequestMethod.POST)
    public ResponseEntity<WalletInfoWrapper> generateAddress(@RequestParam("walletName") String walletName,
                                                             @RequestParam("currencyName") String currencyName) {

        logger.info("walletName {} and currencyName {}", walletName, currencyName);

        //return if the wallet name or the currency is null
        if (Objects.isNull(walletName) || Objects.isNull(currencyName)) {
            return new ResponseEntity<WalletInfoWrapper>(HttpStatus.NOT_ACCEPTABLE);
        }

        WalletInfo walletInfo = walletService.generateAddress(walletName, currencyName);

        if (Objects.isNull(walletInfo)) {
            return new ResponseEntity<WalletInfoWrapper>(HttpStatus.NOT_ACCEPTABLE);
        }

        WalletInfoWrapper walletInfoWrapper = new WalletInfoWrapper();
        walletInfoWrapper.setName(walletInfo.getName());

        return new ResponseEntity<WalletInfoWrapper>(walletInfoWrapper, HttpStatus.CREATED);
    }

La POST demande dans le Postman fourni ci-dessous,

HTTP État 400 - Requis paramètre de Chaîne 'walletName' n'est pas présent

Le message d'erreur informe, Required String parameter 'walletName' is not present

HTTP État 400 - Requis paramètre de Chaîne 'walletName' n'est pas présent

Je peux également fournir le code pour le services et la dataase couches pour l'observation de la liste déroulante des opérations. Quel est le problème ici?

UPDATE

J'ai mis à jour le Postman demande de ce genre et ayant toujours le même message d'erreur,

HTTP État 400 - Requis paramètre de Chaîne 'walletName' n'est pas présent

UPDATE 1

J'ai toujours le même problème,

Je POST avec les données,

{"walletName":"puut","currencyName":"Bitcoin"}

Le code est fourni ci-dessous,

@RequestMapping(value = "/generateAddress", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<WalletInfoWrapper> generateAddress(@RequestBody WalletWithMoneyRequest walletWithMoneyRequest) {

        String walletName = walletWithMoneyRequest.getWalletName();

        String currencyName = walletWithMoneyRequest.getCurrencyName();

        logger.info("walletName {} and currencyName {}", walletName, currencyName);

        //return if the wallet name or the currency is null
        if (Objects.isNull(walletName) || Objects.isNull(currencyName)) {
            return new ResponseEntity<WalletInfoWrapper>(HttpStatus.NOT_ACCEPTABLE);
        }

        WalletInfo walletInfo = walletService.generateAddress(walletName, currencyName);

        if (Objects.isNull(walletInfo)) {
            return new ResponseEntity<WalletInfoWrapper>(HttpStatus.NOT_ACCEPTABLE);
        }

        WalletInfoWrapper walletInfoWrapper = new WalletInfoWrapper();
        walletInfoWrapper.setName(walletInfo.getName());

        return new ResponseEntity<WalletInfoWrapper>(walletInfoWrapper, HttpStatus.CREATED);
    }

La POJO est fourni,

private class WalletWithMoneyRequest {

        String walletName;

        String currencyName;

        public WalletWithMoneyRequest(String walletName, String currencyName) {
            this.walletName = walletName;
            this.currencyName = currencyName;
        }

        public WalletWithMoneyRequest() {
        }

        public String getWalletName() {
            return walletName;
        }

        public String getCurrencyName() {
            return currencyName;
        }

        public void setCurrencyName(String currencyName) {
            this.currencyName = currencyName;
        }

        public void setWalletName(String walletName) {
            this.walletName = walletName;
        }
    }

C'est le message d'erreur,

HTTP État 400 - Requis paramètre de Chaîne 'walletName' n'est pas présent

Ici ia le serveur Tomcat info,

org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver: 08/19/2017 19:45:55 - Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of `mobi.puut.controllers.WalletRestController$WalletWithMoneyRequest` (although at least one Creator exists): can only instantiate non-static inner class by using default, no-argument constructor; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `mobi.puut.controllers.WalletRestController$WalletWithMoneyRequest` (although at least one Creator exists): can only instantiate non-static inner class by using default, no-argument constructor
 at [Source: (PushbackInputStream); line: 1, column: 2]

Tomcat Localhost log

HTTP État 400 - Requis paramètre de Chaîne 'walletName' n'est pas présent

Tomcat Catalina log
HTTP État 400 - Requis paramètre de Chaîne 'walletName' n'est pas présent

  • Il semble que vous êtes l'envoi d'une chaîne JSON comme paramètre, mais ce n'est pas ce que votre contrôleur attend. Ou est-ce juste la façon dont il regarde en Facteur?
  • Comment faire le contrôleur de comprendre?
  • Remarque: Reposant demandes acceptent généralement des paramètres GET ou POST et retour JSON.
  • le @ResponseBody est implicite sur les méthodes de @RestController annoté classes. J'étais pas au courant de la @RequestBody implicite de l'annotation.
  • avez-vous de la sortie de la console de votre serveur ou un journal qui pourrait indiquer pourquoi votre serveur n'aime pas votre demande?
  • Oui, j'ai un message, un coup d'oeil dans la mise à jour du post
  • Vu la sortie. Bon. Essayez de faire de votre classe WalletWithMoneyRequest publique au lieu de privé.
  • Rendant public n'aide pas et encore je obtenir de l' HTTP status of 400. Mais je pense que nous avons cerné le problème avec le message d'erreur fourni dans la question.
  • Faire WalletWithMoneyRequest ses propres extérieur de la classe. Jackson semble être plus difficile à utiliser lors de marshaling json à l'intérieur de la classe. voir: stackoverflow.com/questions/17289964/... . C'est aussi intéressant à lire: cowtowncoder.com/blog/archives/2010/08/entry_411.html copié à partir lié réponse.

InformationsquelleAutor Arefe | 2017-08-19