Java 使用SpringRestController和Jackson构建控制器给我HTTPStats406
我正在构建一个rest控制器,使用Spring来处理请求,使用Jackson来序列化数据Java 使用SpringRestController和Jackson构建控制器给我HTTPStats406,java,json,http,spring-mvc,jackson,Java,Json,Http,Spring Mvc,Jackson,我正在构建一个rest控制器,使用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 "acc
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”标题:
因此,我使用一个名为Postman的工具在请求中手动添加这个“Accept”头,再次发送请求,但仍然得到相同的错误:
我很困惑,我已经将“application/json”作为一种可接受的数据类型,为什么我仍然有这个数据不受支持的错误?仅供参考,以下是我的Rest控制器类:
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;
}
}
包mywebapp.controller;
导入java.io.IOException;
导入java.util.List;
导入org.slf4j.Logger;
导入org.slf4j.LoggerFactory;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.beans.factory.annotation.Qualifier;
导入org.springframework.web.bind.annotation.RequestMapping;
导入org.springframework.web.bind.annotation.RequestMethod;
导入org.springframework.web.bind.annotation.ResponseBody;
导入org.springframework.web.bind.annotation.RestController;
导入com.fasterxml.jackson.core.JsonProcessingException;
导入com.fasterxml.jackson.databind.ObjectMapper;
导入mywebapp.dao.model.interfaces.PetDao;
导入mywebapp.model.Pet;
@RestController
@RequestMapping(value=“petJson.htm”)
公共类PetControllerAjax{
私有静态最终记录器LOG=LoggerFactory.getLogger(PetController.class);
公共静态记录器getLog(){
返回日志;
}
@自动连线
@限定符(“PetDaoJpaImpl”)
私人佩刀佩刀;
公共PetDao getPetDao(){
返回petDao;
}
公共无效setPetDao(PetDao-PetDao){
this.petDao=petDao;
}
@RequestMapping(method=RequestMethod.GET)
公共列表getAllPets()引发IOException{
getLog().info(“Rest控制器激活…”);
List-petList=getPetDao().getAllPets();
返回petList;
}
}
这是我最喜欢的实体类:
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;
}
}
包mywebapp.model;
导入javax.persistence.CascadeType;
导入javax.persistence.Column;
导入javax.persistence.Entity;
导入javax.persistence.FetchType;
导入javax.persistence.GeneratedValue;
导入javax.persistence.Id;
导入javax.persistence.JoinColumn;
导入javax.persistence.OneToMany;
导入javax.persistence.OneToOne;
导入javax.persistence.Table;
导入com.fasterxml.jackson.annotation.JsonProperty;
导入java.util.Date;
导入java.util.Set;
@实体
@表(name=“pet”)
公营宠物{
私人小酒店;
私有字符串名称;
私人字符串所有者;
私有串种;
私密性;
私人日期出生;
私人约会死亡;
私人套装玩具;
@身份证
@列(name=“pet_id”)
@生成值
@JsonProperty(value=“pet_id”,必需=true)
公共int getId(){
返回petId;
}
公共无效集合id(内部id){
this.petId=id;
}
@JsonProperty(value=“pet_name”,必需=true)
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共字符串getOwner(){
归还所有人;
}
公共void集合所有者(字符串所有者){
this.owner=所有者;
}
公共字符串getSpecies(){
返回物种;
}
公共空间集合物种(字符串物种){
这个物种=物种;
}
公共字符串getSex(){
回归性;
}
公共无效集合(字符串性别){
这个。性=性;
}
公众出生日期(){
回生;
}
公共出生日期(出生日期){
这个.出生=出生;
}
公众死亡日期(){
返回死亡;
}
公众死亡(死亡日期){
死亡=死亡;
}
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER,targetEntity=Toy.class,mappedBy=“pet”)
公共集getToys(){
归还玩具;
}
公众玩具(套装玩具){
这个玩具=玩具;
}
}
有人知道这里发生了什么吗?如有任何提示,我们将不胜感激,提前表示感谢 Spring4.2不支持Jackson 2.7-它将在4.3+中出现
查看Spring on的库要求,并查看和。您使用的是哪种Spring和Jackson版本?如果在
@RequestMapping
注释中添加products
属性以强制“application/json”
媒体类型,会发生什么情况?@BrianClozel您好,我对Spring使用4.2.5.RELEASE,对Jackson使用2.7.0-rc2