2015-12-17 1 views
0

Как получить более подробную информацию:Как работает @RequestBody

Я делаю простой запрос на отправку почты из почтового отправителя chrome extension.

Мой контроллер:

@Controller 
@RequestMapping("/theme") 
public class ThemeController { 

    @RequestMapping(value = "/create", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) 
    public @ResponseBody 
    Status addTheme(@RequestBody Theme theme) { 
     try { 
      themeServices.addEntity(theme); 
      return new Status(1, "Theme added Successfully !"); 
     } catch (Exception e) { 
      // e.printStackTrace(); 
      return new Status(0, e.toString()); 
     } 

    } 

В Theme.java:

@Entity 
@Table(name = "theme", uniqueConstraints = { @UniqueConstraint(columnNames = { "theme_id" }) }) 
@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" }) 
@NamedQuery(name = "Theme.findAll", query = "SELECT t FROM Theme t") 
public class Theme implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "theme_id") 
    private long themeId; 

    private String description; 

    private String name; 

    @ManyToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "category_id", nullable=true) 
    private ThemeCategory themeCategory; 

В ThemeCategory.java:

@Entity 
@Table(name = "theme_category", uniqueConstraints = { @UniqueConstraint(columnNames = { "category_id" }) }) 
@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" }) 
@NamedQuery(name = "ThemeCategory.findAll", query = "SELECT t FROM ThemeCategory t") 
public class ThemeCategory implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "category_id") 
    private long categoryId; 

    private String description; 

    private String name; 

    // bi-directional many-to-one association to Theme 
    // @OneToMany(mappedBy="themeCategory") 
    @OneToMany(mappedBy = "themeCategory", fetch = FetchType.EAGER) 
    @Column(nullable = true) 
    @JsonManagedReference 
    private Set<Theme> themes; 

    // bi-directional many-to-one association to ThemeCategory 
    @ManyToOne 
    @JoinColumn(name = "parent_category_id", nullable=true) 
    @JsonBackReference 
    private ThemeCategory parentThemeCategory; 

    // bi-directional many-to-one association to ThemeCategory 
    // @OneToMany(mappedBy="themeCategory") 
    @OneToMany(mappedBy = "parentThemeCategory", fetch = FetchType.EAGER) 
    @Column(nullable = true) 
    @JsonManagedReference 
    private Set<ThemeCategory> themeCategories; 

Тема Категория Таблица:

CREATE TABLE `theme_category` (
    `category_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, 
    `parent_category_id` smallint(5) unsigned DEFAULT NULL, 
    `name` varchar(45) NOT NULL, 
    `description` varchar(1000) DEFAULT NULL , 
    `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (`category_id`), 
    KEY `idx_parent_category_id` (`parent_category_id`), 
    CONSTRAINT `fk_parent_category_id` FOREIGN KEY (`parent_category_id`) REFERENCES `theme_category` (`category_id`) ON UPDATE CASCADE 
) ENGINE=InnoDB AUTO_INCREMENT=301 DEFAULT CHARSET=utf8; 

Тема Стол:

CREATE TABLE `theme` (
    `theme_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(45) NOT NULL, 
    `category_id` smallint(5) unsigned NOT NULL, 
    `file_path` varchar(200) DEFAULT NULL, 
    `description` varchar(1000) DEFAULT NULL, 
    `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (`theme_id`), 
    KEY `idx_category_id` (`category_id`), 
    CONSTRAINT `fk_category_id` FOREIGN KEY (`category_id`) REFERENCES `theme_category` (`category_id`) ON UPDATE CASCADE 
) ENGINE=InnoDB AUTO_INCREMENT=401 DEFAULT CHARSET=utf8; 

Я использую Почтальон расширение, чтобы сделать отдых после вызова:

http://localhost:8080/CustomerRegistration/theme/create

Заголовок Params:

Content-Type: применение/JSON

Json Body:

{"description":"theme8","name":"theme8","themeCategory":{"categoryId":302, "themes":[],"parentThemeCategory":{}, "themeCategories":[]}} 

И попытался около 2 часов с несколькими способами тела. Но неизменно говорили:

Сервер отказал этот запрос, потому что объект запроса в формате, который не поддерживается запрашиваемым ресурсом для запрошенного метода.

Чтобы проанализировать, я не получаю ничего. В консоли Eclipse также ничего не отображается относительно этой проблемы.

Что не так? Есть ли какие-либо инструменты для создания действительных запросов.

+0

Я пробовал свой код с тем же запросом, и он работает. Единственное отличие заключается в том, что я использовал «Advance Rest Client» для отправки запроса. – reos

+0

Существует таблица Theme_Category, имеющая onetomany отношения между субъектами категории и темы. которые поддерживают тематические категории и темы. Возможно, причина в том, что я опубликовал весь код в https://github.com/Ravikumarmaddi/UserRegistration/tree/master/UserRegistration. Просьба посмотреть его. – Sun

+0

Добавьте заголовок Accept для приложения/json и повторите попытку –

ответ

0

все с вашим кодом выглядит хорошо. Я не видел никаких проблем.

Попробуйте протестировать с другим клиентом для отдыха или лучше - протестируйте его с помощью curl. Curl - это бесплатный и простой в использовании инструмент командной строки для переноса URL-адресов на стороне клиента.

curl -i -X POST http://localhost:8080/CustomerRegistration/theme/create -H "Content-Type:application/json" -d '{"description":"theme8","name":"theme8","themeCategory":{"categoryId":302,"themes":[],"parentThemeCategory":{},"themeCategories":[]}}' 

 Смежные вопросы

  • Нет связанных вопросов^_^