找不到可接受的代表

新手上路,请多包涵

我是 Spring Boot 的新手,我可能会犯一些愚蠢的错误,所以提前 Appologies 解决这样的问题。我正在尝试编写接受以下 JSON 的 POST API:

 {
  "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"]
}

考虑遵循 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;

}

OpenHrs 是用于映射 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;

}

具有 Post API 的 AbcController

 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
    }

}

请找到以下我得到的回应是:

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

原文由 Mayur 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 286
1 个回答

POST 请求不起作用,因为 Spring 不知道它期望什么样的数据。所以你需要告诉 spring 你期待 APPLICATION_JSON_VALUE 所以它知道如何处理。 consumes= 正如您可能猜到的那样,它将告诉 Spring 传入的 POST 正文上下文类型。

 @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
}

使用 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
}

如您所见,我还添加了其他名称, produces= 这将指示 Spring 如何格式化该请求的响应正文。所以前端接收 JSON 格式化的正文,而不仅仅是随机文本。

原文由 Praveen Premaratne 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题