Столкнулся с проблемой, не могу вернуть объект в REST-Controller (метод addUser). Вылазит ошибка HTTP Status 406 -The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers.
Необходимо вернуть в виде:
{
"id": "Id generated by the back-end",
"firstName": "Some first name",
"lastName": "The last name",
"userName": "The user name"
}
Буду благодарен за помощь!
Conntroller class
@Controller
public class UserControllerImpl implements UserController {
private UserRepository repository;
public UserControllerImpl() {
}
@Autowired
public UserControllerImpl(UserRepository repository) {
this.repository = repository;
}
@RequestMapping(value = "/", method = RequestMethod.GET)
public String welcomeFile() {
return "index";
}
@RequestMapping(value = "userservice/addUser", method = RequestMethod.GET, headers="Accept=text/html")
@Override
public String addUser(ModelMap model) {
return "userservice/addUser";
}
@RequestMapping(value = "userservice/addUser", method = RequestMethod.POST)
@Override
public @ResponseBody User addUser(@RequestBody User user) {
User user1 = this.repository.createUser(user);
return user1;
}
}
addUser.jsp
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Add User</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.js"></script>
</head>
<body>
<script>
$(document).ready(function () {
$("#register").submit(function (e) {
var user = {
firstName: $("#firstName").val(),
lastName: $("#lastName").val(),
userName: $("#userName").val(),
plainTextPassword: $("#plainTextPassword").val()
};
$.ajax({
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
url: "addUser",
contentType: 'application/json',
data: JSON.stringify(user),
type: 'POST',
success: function (data) {
location.reload();
},
error: function (xhr, status, errorThrown) {
alert('A user with the given username already exists fwefwefewfewf' + status + ". " + errorThrown);
}
});
e.preventDefault();
});
});
// function funcSuccess(data) {
// $("#id").text(data.id);
// $("#firstName").text(data.firstName);
// $("#lastName").text(data.lastName);
// $("#userName").text(data.userName);
// }
</script>
<form method="post" id="register" action="addUser" commandName="user">
<table border="1" cellpadding="8" cellspacing="0">
<tr>
<td>First Name:</td>
<td><input type="text" name="firstName" id="firstName" value=""/></td>
</tr>
<tr>
<td>Last Name:</td>
<td><input type="text" name="lastName" id="lastName" value=""/></td>
</tr>
<tr>
<td>User Name:</td>
<td><input type="text" name="userName" id="userName" value=""/></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="text" name="plainTextPassword" id="plainTextPassword" value=""/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" id="registerUserSubmit" value="Registration"/></td>
</tr>
</table>
</form>
</body>
</html>
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan">
<array>
<value>com.temaprof.app.model</value>
</array>
</property>
<property name="hibernateProperties">
<value>hibernate.dialect=org.hibernate.dialect.PostgreSQL94Dialect</value>
</property>
</bean>
</beans>
Результат выполнения
После нажатия кнопки
index.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>User Manager</title>
</head>
<body>
<div>
<h1>User Manager</h1>
</div>
<a href="userservice/addUser">Registration</a>
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>CRUD</groupId>
<artifactId>CRUD</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>Simple REST by temaprof</name>
<properties>
<spring.version>4.2.2.RELEASE</spring.version>
<hibernate.version>5.0.3.Final</hibernate.version>
<!--DB-->
<postgresql.version>9.4.1211</postgresql.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.2.Final</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--DataBase-->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgresql.version}</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>1.10.2-1</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.3</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.13</version>
</dependency>
</dependencies>
<build>
<finalName>project</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
despatcher-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<mvc:annotation-driven />
<context:component-scan base-package="com.temaprof.app.controller"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
Убери
consumes = {"application/json"}
у GET метода addUser
. Какое отношение json имеет к этому методу?
Вместо этого использу headers="Accept=text/html"
.
Если класс помечен аннотацией @RestController
, то все методы яляются @ResponseBody
и не могут возвращать JSP страницы.
Чтобы использовать аннтотации @RequestBody
/@ResponseBody
нужно добавить тег <mvc:annotation-driven />
в dispatcher-servlet.xml
. Если не добавить тег, то это может вызывать HTTP ошибку 415 Unsupported Media Type
The server refused this request because the request entity is in a format not supported by the requested resource for the requested method
Лог tomcat
org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.logException Handler execution resulted in exception: Content type 'application/json' not supported
Событие submit относится к форме, а не кнопке.
Чтобы использовать библиотеку jQuery ($()
), ее нужно сначала подключить – Как подключить jQuery к проекту? .
Виртуальный выделенный сервер (VDS) становится отличным выбором
Всем привет, сейчас пишу программу с большим количеством фрагментов и с одной активитиСуть в том, что в активити постоянно меняются местами...
Как у переменной типа string по индексу получить коды символов? Понятно что обращаться в цикле к индексуКак именно получить код и какой тип данных...
В android приложении по нажатию на кнопку должна начаться загрузка файла по прямой ссылке на загрузку файла( при открытии сразу предлагает сохранить...
Доброго времени сутокЕсть несколько Docker контейнеров с Jenkins, Nexus и Maven