Java 错误406:Spring3.x中无法返回JSON响应

Java 错误406:Spring3.x中无法返回JSON响应,java,json,spring,hibernate,spring-mvc,Java,Json,Spring,Hibernate,Spring Mvc,我试图使用SpringMVC和hibernate输出Json响应。当我试图按我的控制器设计点击url时。我犯了这个错误 HTTP状态406 此请求标识的资源只能根据请求“接受”头()生成具有不可接受特征的响应。 我在pom.xml中添加了jackson映射器asl My Web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001

我试图使用SpringMVC和hibernate输出Json响应。当我试图按我的控制器设计点击url时。我犯了这个错误

HTTP状态406 此请求标识的资源只能根据请求“接受”头()生成具有不可接受特征的响应。

我在pom.xml中添加了jackson映射器asl

My Web.xml

        <?xml version="1.0" encoding="UTF-8"?>
        <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        id="WebApp_ID" version="2.5">

        <display-name>restApp</display-name>

         <servlet>
         <servlet-name>spring</servlet-name>
         <servlet-class>
                org.springframework.web.servlet.DispatcherServlet
          </servlet-class>
          <load-on-startup>1</load-on-startup>
         </servlet>

        <servlet-mapping>
         <servlet-name>spring</servlet-name>
         <url-pattern>/</url-pattern>
         </servlet-mapping>
        </web-app>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="
   http://www.springframework.org/schema/beans     
   http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
   http://www.springframework.org/schema/context 
   http://www.springframework.org/schema/context/spring-context-3.1.xsd
   http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">

    <context:component-scan base-package="model,controller,dao,service" />

    <tx:annotation-driven transaction-manager="hibernateTransactionManager" />
    <!--  
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver"
        id="jspViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
    -->
    <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
        <property name="mediaTypes">
          <map>
              <entry key="html" value="text/html"/>
              <entry key="json" value="application/json"/>
              <entry key="xml"  value="application/xml"/>
          </map>
        </property>
         <property name="viewResolvers">
            <list>
              <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
                <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
                <property name="prefix" value="/WEB-INF/jsp/"/>
                <property name="suffix" value=".jsp"/>
              </bean>
            </list>
        </property>
    </bean>

    <bean class="org.springframework.jdbc.datasource.DriverManagerDataSource"
        id="dataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/world"></property>
        <property name="username" value="root"></property>
        <property name="password" value="Tpg@1234"></property>
    </bean>

    <bean class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
        id="sessionFactory">
        <property name="dataSource" ref="dataSource"></property>
        <property name="annotatedClasses">
            <list>
                <value>model.Book</value>   
                <value>model.Chapter</value>
                <value>model.Status</value>
            </list>
        </property>

        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>            
        </property>
    </bean>

    <bean class="org.springframework.orm.hibernate4.HibernateTransactionManager"
        id="hibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>


    <bean id="persistenceExceptionTranslationPostProcessor"
        class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />

    <bean id="BookDao" class="dao.BookDaoImpl"></bean>
    <bean id="ChapterDao" class="dao.ChapterDaoImpl"></bean>
    <bean id="Bookservice" class="service.BookServiceImpl"></bean>
    <bean id="ChapterService" class="service.ChapterServiceImpl"></bean>

</beans>

雷斯塔普
春天
org.springframework.web.servlet.DispatcherServlet
1.
春天
/
Mydispatcherservlet.xml(springservlet.xml)


模型书
模型.第章
模型.状态
org.hibernate.dialogue.mysql5dialogue
真的
更新
这是我的控制器

@Controller
@RequestMapping(value="/book")
public class BookController {

@Autowired
BookService bookService;

@Autowired
BookDao bookDao;

static final Logger logger = Logger.getLogger(BookController.class);

@RequestMapping(value="/add", method = RequestMethod.POST,headers="Accept=*/*")
public @ResponseBody
Status addBook(@RequestBody Book book){
    try{
        bookService.addBook(book);
        return new Status(1,"book added successfully");
    }catch(Exception e){
        return new Status(0, e.toString());
    }
}


@RequestMapping(value="/{bookId}",method = RequestMethod.GET,headers="Accept=*/*")
public @ResponseBody
Book getBook(@PathVariable("bookId")Integer bookId){
    Book book = null;
    try{
        book = bookService.getBookById(bookId);
    }catch(Exception e){
        e.printStackTrace();
    }
    System.out.println("book returned");
    System.out.println(book);
    return book;
}

@RequestMapping(value="/list",method=RequestMethod.GET,headers="Accept=*/*")
public @ResponseBody
List<Book> getBookList(){
    List<Book> bookList = null;
    try{
        bookList = bookService.getBookList();
    }catch(Exception e){
        e.printStackTrace();
    }
    System.out.println("bookList returned");
    System.out.println(bookList);
    return bookList;
}

@RequestMapping(value = "/delete/{bookId}", method = RequestMethod.GET,headers="Accept=*/*")
public @ResponseBody
Status deleteEmployee(@PathVariable("bookId") long bookId) {

    try {
        bookService.deleteBook(bookId);;
        return new Status(1, "Employee deleted Successfully !");
    } catch (Exception e) {
        return new Status(0, e.toString());
    }

}
@控制器
@请求映射(value=“/book”)
公共类图书管理员{
@自动连线
图书服务;
@自动连线
书刀书刀;
静态最终记录器=Logger.getLogger(BookController.class);
@RequestMapping(value=“/add”,method=RequestMethod.POST,headers=“Accept=*/*”)
公共@ResponseBody
状态addBook(@RequestBody Book){
试一试{
bookService.addBook(book);
返回新状态(1,“添加图书成功”);
}捕获(例外e){
返回新状态(0,例如toString());
}
}
@RequestMapping(value=“/{bookId}”,method=RequestMethod.GET,headers=“Accept=*/*”)
公共@ResponseBody
Book getBook(@PathVariable(“bookId”)整数bookId){
Book=null;
试一试{
book=bookService.getBookById(bookId);
}捕获(例外e){
e、 printStackTrace();
}
System.out.println(“还书”);
系统输出打印(图书);
还书;
}
@RequestMapping(value=“/list”,method=RequestMethod.GET,headers=“Accept=*/*”)
公共@ResponseBody
List getBookList(){
List bookList=null;
试一试{
bookList=bookService.getBookList();
}捕获(例外e){
e、 printStackTrace();
}
System.out.println(“返回的书目”);
系统输出打印项次(书目);
归还书目;
}
@RequestMapping(value=“/delete/{bookId}”,method=RequestMethod.GET,headers=“Accept=*/*”)
公共@ResponseBody
状态deleteEmployee(@PathVariable(“bookId”)long bookId){
试一试{
bookService.deleteBook(bookId);;
返回新状态(1,“员工已成功删除!”);
}捕获(例外e){
返回新状态(0,例如toString());
}
}
现在,当我试图点击url时,它给出了错误“HTTP状态406”。 此请求标识的资源只能根据请求“接受”标头()生成具有不可接受特征的响应。

Hibernate查询在点击url后在控制器中正常运行。只是我没有得到JSON响应

我的POJO类(Book.java)

@实体
@表(name=“book”)
@JsonIgnoreProperties({“HibernateLazInitializer”,“handler”})
公共类图书实现了可序列化{
@身份证
@列(name=“bookId”)
@生成值
私有整数bookId;
@列(name=“bookName”)
私有字符串书名;
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@可接合(
name=“BookChapter”,
joinColumns=@JoinColumn(name=“BOOK\u ID”),
inverseJoinColumns=@JoinColumn(name=“CHAPTER_ID”)
)
公共设置章节;
公共整数getBookId(){
返回bookId;
}
公共void setBookId(整数bookId){
this.bookId=bookId;
}
公共字符串getBookName(){
返回书名;
}
public void setBookName(字符串bookName){
this.bookName=bookName;
}
公共集getChapter(){
返回章节;
}
公共无效设置章节(设置章节){
本章=本章;
}
}

尝试删除Accept标头中的Asterix表达式。最好定义支持的媒体类型,如:headers=“Accept=text/html”headers=“Accept=application/json”等等…当accept头看起来不错,但你看到这个问题时,通常意味着依赖项错误或缺失,或者bean中有错误的东西,例如错误的setter/getter,我在这里对此进行了评论。在你的情况下,jackson版本很好,所以我怀疑你的书pojo有问题,你能将它粘贴到questionOka中吗y、 我已经在这里发布了我的POJO类。很难说,如果我是你,我会将chapter属性添加到JsonIgnoreProperties列表中,如果它仍然不起作用,那么问题不在转换中,如果它起作用,那么你至少知道在哪里可以找到它
@Entity
@Table(name="book")
@JsonIgnoreProperties({"hibernateLazyInitializer","handler"})
public class Book implements Serializable{

@Id
@Column(name="bookId")
@GeneratedValue
private Integer bookId;

@Column(name="bookName")
private String bookName;

@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinTable(
        name="BookChapter",
        joinColumns = @JoinColumn(name="BOOK_ID"),
        inverseJoinColumns = @JoinColumn(name="CHAPTER_ID")
)
public Set<Chapter> chapter;

public Integer getBookId() {
    return bookId;
}

public void setBookId(Integer bookId) {
    this.bookId = bookId;
}

public String getBookName() {
    return bookName;
}

public void setBookName(String bookName) {
    this.bookName = bookName;
}

public Set<Chapter> getChapter() {
    return chapter;
}

public void setChapter(Set<Chapter> chapter) {
    this.chapter = chapter;
}

}