使用Spring RestController和Jackson构建控制器给我HTTP Stats 406

时间:2016-03-10 19:03:23

标签: java json http spring-mvc jackson

我正在构建一个使用Spring来处理请求的休息控制器和Jackson来序列化数据。但是我在线学习了教程但最终得到了一个错误。

HTTP Status 406 -

type Status report

message

description The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers.

谷歌待了一段时间后,我意识到这是因为我的请求中没有“application / json”作为我的“Accept”标题: enter image description here

所以我使用名为Postman的工具在请求中手动添加此“Accept”标头,再次发送请求,但仍然得到相同的错误:

enter image description here

我很困惑,我已经将“application / json”作为可接受的数据类型之一,为什么我仍然有这个数据不支持的错误?仅供参考,这是我的Rest Controller课程:

package mywebapp.controller;

import java.io.IOException;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
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.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import mywebapp.dao.model.interfaces.PetDao;
import mywebapp.model.Pet;

@RestController
@RequestMapping(value = "petJson.htm")
public class PetControllerAjax {

    private static final Logger LOG = LoggerFactory.getLogger(PetController.class);


    public static Logger getLog() {
        return LOG;
    }

    @Autowired
    @Qualifier("PetDaoJpaImpl")
    private PetDao petDao;

    public PetDao getPetDao() {
        return petDao;
    }

    public void setPetDao(PetDao petDao) {
        this.petDao = petDao;
    }

    @RequestMapping(method = RequestMethod.GET)
    public List<Pet> getAllPets() throws IOException {
        getLog().info("Rest Controller activating........");
        List<Pet> petList = getPetDao().getAllPets();
        return petList;
    }

}

这是我的Pet实体类:

package mywebapp.model;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import com.fasterxml.jackson.annotation.JsonProperty;

import java.util.Date;
import java.util.Set;

@Entity
@Table(name = "pet")
public class Pet {

    private int petId;

    private String name;

    private String owner;

    private String species;

    private String sex;

    private Date birth;

    private Date death;

    private Set<Toy> toys;  


    @Id
    @Column(name = "pet_id")
    @GeneratedValue
    @JsonProperty(value="pet_id",required=true)
    public int getId() {
        return petId;
    }

    public void setId(int id) {
        this.petId = id;
    }

    @JsonProperty(value="pet_name",required=true)
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getOwner() {
        return owner;
    }

    public void setOwner(String owner) {
        this.owner = owner;
    }

    public String getSpecies() {
        return species;
    }

    public void setSpecies(String species) {
        this.species = species;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    public Date getDeath() {
        return death;
    }

    public void setDeath(Date death) {
        this.death = death;
    }

    @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER,targetEntity=Toy.class, mappedBy="pet")
    public Set<Toy> getToys() {
        return toys;
    }

    public void setToys(Set<Toy> toys) {
        this.toys = toys;
    }



}

任何人都知道这里发生了什么?任何提示都将受到赞赏,提前多多谢谢!

1 个答案:

答案 0 :(得分:0)

Spring 4.2不支持Jackson 2.7 - 它将在4.3 +。

the Spring wiki上查看Spring的库要求,并查看SPR-13728SPR-13483