web-dev-qa-db-fra.com

Impossible de trouver une représentation acceptable

Je suis nouveau sur Spring Boot et je fais peut-être une erreur idiote, alors je vous prie de m'excuser à l'avance pour une telle question. J'essaie d'écrire POST API qui accepte le JSON suivant:

{
  "id" : null,
  "a": 1.3,
  "b": "somestring",
   "mapJson" : 
    { 
        "monday" : "10:00-12:00/n14:00-18:00", 
        "tuesday" : "10:00-12:00/n14:00-18:00",
        "wednesday" : "10:00-12:00/n14:00-18:00",
        "thursday" : "10:00-12:00/n14:00-18:00",
        "friday" : "10:00-12:00/n14:00-18:00",
        "saturday" : "10:00-12:00/n14:00-18:00",
        "sunday" : "10:00-12:00/n14:00-18:00"
    },
    "list" : ["cc","paytm","debit"]
}

Envisagez de suivre la classe DTO, AbcDTO:

package com.abb.dto;
import Java.util.List;
import com.abb.entities.OpeningHrs;
import lombok.Data;

@SuppressWarnings("unused")
@Data
public class AbcDTO {

    private Long id;
    private Double a;
    private String b;
    private MapJson mapJson;
    private List<String> list;

}

OpeningHrs est une classe pour la cartographie de la structure Json Map,

package com.abb.entities;
import lombok.Data;
@SuppressWarnings("unused")
@Data
public class MapJson {

    private String monday;
    private String tuesday;
    private String wednesday;
    private String thursday;
    private String friday;
    private String saturday;
    private String sunday;

}

AbcController qui ont l'API Post:

package com.abb.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.abb.dto.AbcDTO;

@RestController
@EnableAutoConfiguration
@RequestMapping("/abc")
@GetMapping(value="/{id}",produces={MediaType.APPLICATION_JSON_VALUE})
public class HotelController {

   @RequestMapping(value = "/xyz", method = RequestMethod.POST)
    public @ResponseBody AbcDTO registerHotel(@RequestBody AbcDTO aaa) {

       System.out.println(aaa.toString());
       return aaa; 
   // I'm not able to map JSON into this Object
    }

}

Veuillez trouver la réponse suivante que je reçois est:

{
    "timestamp": 1509193409948,
    "status": 406,
    "error": "Not Acceptable",
    "exception": "org.springframework.web.HttpMediaTypeNotAcceptableException",
    "message": "Could not find acceptable representation",
    "path": "/abc/xyz"
}
6
Mayur

La demande POST ne fonctionne pas car Spring ne sait pas quel type de données il attend. Vous devrez donc dire au printemps que vous attendez APPLICATION_JSON_VALUE pour qu'il sache comment traiter. consumes=, comme vous l'avez probablement deviné, indiquera à Spring quel est le type de contexte de corps POST entrant.

@RequestMapping(value = "xyz", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody AbcDTO registerHotel(@RequestBody AbcDTO aaa) {

    System.out.println(aaa.toString());
    return aaa; 
    // I'm not able to map JSON into this Object
}

Avec PostMapping

@PostMapping(value = "xyz", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody AbcDTO registerHotel(@RequestBody AbcDTO aaa) {

   System.out.println(aaa.toString());
   return aaa; 
   // I'm not able to map JSON into this Object
}

Comme vous pouvez le voir, j'ai également ajouté quelque chose d'autre appelé, produces= ceci indiquera à Spring comment formater le corps de réponse de cette demande. Le frontend reçoit donc le corps formaté JSON, pas seulement du texte aléatoire.

4
Praveen Premaratne