Почему я получаю 415 неподдерживаемых типов носителей в Spring MVC? - PullRequest
0 голосов
/ 08 июня 2019

Я получаю ошибку ниже;Я перепробовал все, но не получил разрешение:

HTTP Status 415 – Unsupported Media Type 

Я пытаюсь отправить объект JSON на контроллер, как положил его в @Requestbody

<%@page import="org.json.JSONObject"%>
<%@ page language="java" contentType="application/json charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Welcome</h1>

<a href="./getRegister">Register</a>
<a href="./delete?id=1">Delete</a>

<%
    JSONObject obj = new JSONObject();
    obj.put("id", "1");
    obj.put("name", "ABC");
%>

<form action="./jsonreq" method="post">
    <input type="hidden" name="obj" id="obj" value="<%=obj%>">
    <input type="submit" value="Submit"/>
</form>
</body>
</html>

2) Контроллер:


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
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.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.springhibernate.bean.Employee;
import com.springhibernate.service.EmployeeService;

@Controller
public class RegistrationController {



    @RequestMapping(path="/jsonreq", method=RequestMethod.POST, consumes=MediaType.APPLICATION_JSON_VALUE)
    public @ResponseBody Employee json(@RequestBody Employee obj) 
    {
        System.out.println("JSON"+obj.toString());
        return obj;
    }

}

1 Ответ

0 голосов
/ 08 июня 2019

Вы получаете статус 415, потому что ваш браузер отправляет запрос с типом контента application/x-www-form-urlencoded в метод контроллера, который принимает только application/json.

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

Если вы это сделаете, один из способов сделать это - использовать Javascript для компиляции данных из формы (или в другом месте) в виде JSON и сделать XMLHttpRequest , отправив его на ваш сервер.

Другим гораздо менее идеальным способом было бы удалить ограничение consumes для метода контроллера, изменить аргумент на @RequestParam("obj") String obj и вручную проанализировать ответ в методе контроллера, используя Autowired ObjectMapper, используя objectMapper.readValue(obj, Employee.class).

...