Java Spring MVC POST和PUT不支持的媒体类型

Java Spring MVC POST和PUT不支持的媒体类型,java,spring,spring-mvc,Java,Spring,Spring Mvc,我正在做一个项目(使用SPRING MVC),我用GET、PUT和POST创建了一个控制器,工作正常,但现在如果我尝试POST和PUT,我会出错: 服务器拒绝了此请求,因为请求实体的格式不受请求方法的请求资源的支持 我的控制器: /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Te

我正在做一个项目(使用SPRING MVC),我用GET、PUT和POST创建了一个控制器,工作正常,但现在如果我尝试POST和PUT,我会出错: 服务器拒绝了此请求,因为请求实体的格式不受请求方法的请求资源的支持

我的控制器:

  /*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package zw.co.telecel.camsapi.controllers;

import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.PersistenceException;
import javax.persistence.Query;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
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.ResponseBody;
import zw.co.telecel.camsapi.entities.District;
import zw.co.telecel.camsapi.utils.ApiResponse;
import zw.co.telecel.camsapi.utils.Helper;
import zw.co.telecel.camsapi.utils.ResponseCode;

/**
 *
 * @author prime
 */
@Controller
@RequestMapping("/districts")
public class DistrictController {

    private static final Logger logger = Logger.getLogger(UserController.class);

    /**
     * Gets all districts registered in the system
     *
     * @return
     */
    @RequestMapping(value = "/", method = RequestMethod.GET, produces = "application/json")
    @ResponseBody
    public ApiResponse getDistricts() {
        ApiResponse response = new ApiResponse();
        BasicConfigurator.configure();
        EntityManagerFactory emf = null;
        EntityManager em = null;
        try {
            emf = Persistence.createEntityManagerFactory(Helper.PERSISTENCE_UNIT_NAME);
            em = emf.createEntityManager();
            Query query = em.createNamedQuery("District.findAll");
            List<District> districts = query.getResultList();
            if (districts.isEmpty()) {
                logger.info(districts);
                response.setCode(ResponseCode.NOT_FOUND);
                response.setDescription("NOT_FOUND");
                response.setIsSuccess(false);
                response.setData(districts);
                logger.info(response);
                return response;

            } else {
                logger.info(districts);
                response.setCode(ResponseCode.FOUND);
                response.setDescription("FOUND");
                response.setIsSuccess(true);
                response.setData(districts);
                logger.info(response);
                return response;
            }

        } catch (PersistenceException ex) {
            logger.error(ex);
            response.setCode(ResponseCode.FAILED_DEPENDENCY);
            response.setDescription("Failed dependency.");
            response.setIsSuccess(false);
            return response;
        } catch (Exception ex) {
            logger.error(ex);
            response.setCode(ResponseCode.INTERNAL_SERVER_ERROR);
            response.setDescription("Failed to process request.");
            response.setIsSuccess(false);
            return response;

        } finally {
            if (em != null) {
                if (em.isOpen()) {
                    em.close();
                }
            }

        }

    }

    /**
     * *
     * Get district by id
     *
     * @param id
     * @return
     */
    @RequestMapping(value = "/{id}", method = RequestMethod.GET, produces = "application/json")
    @ResponseBody
    public ApiResponse getDistrict(@PathVariable Integer id) {
        ApiResponse response = new ApiResponse();

        BasicConfigurator.configure();
        EntityManagerFactory emf = null;
        EntityManager em = null;
        try {
            emf = Persistence.createEntityManagerFactory(Helper.PERSISTENCE_UNIT_NAME);
            em = emf.createEntityManager();
            Query query = em.createNamedQuery("District.findById");
            query.setParameter("id", id);
            List<District> districts = query.getResultList();
            if (districts.isEmpty()) {
                logger.info(districts);
                response.setCode(ResponseCode.NOT_FOUND);
                response.setDescription("NOT_FOUND");
                response.setIsSuccess(false);
                response.setData(districts);
                logger.info(response);
                return response;

            } else {
                logger.info(districts);
                response.setCode(ResponseCode.FOUND);
                response.setDescription("FOUND");
                response.setIsSuccess(true);
                response.setData(districts);
                logger.info(response);
                return response;
            }
        } catch (PersistenceException ex) {
            logger.error(ex);
            response.setCode(ResponseCode.FAILED_DEPENDENCY);
            response.setDescription("Failed dependency.");
            response.setIsSuccess(false);
            return response;
        } catch (Exception ex) {
            logger.error(ex);
            response.setCode(ResponseCode.INTERNAL_SERVER_ERROR);
            response.setDescription("Failed to process request.");
            response.setIsSuccess(false);
            return response;

        } finally {
            if (em != null) {
                if (em.isOpen()) {
                    em.close();
                }
            }

        }
    }

    /**
     * *
     * Create new district
     *
     * @param district
     * @return
     */
    @RequestMapping(value = "/", method = RequestMethod.POST, produces = "application/json", consumes = MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    public ApiResponse createDistrict(@RequestBody District district) {
        ApiResponse response = new ApiResponse();
        BasicConfigurator.configure();
        EntityManagerFactory emf = null;
        EntityManager em = null;
        try {

            emf = Persistence.createEntityManagerFactory(Helper.PERSISTENCE_UNIT_NAME);
            em = emf.createEntityManager();
            Query query = em.createNamedQuery("District.findByName");
            query.setParameter("name", district.getName());
            List<District> districts = query.getResultList();

            if (districts.isEmpty()) {
                em.getTransaction().begin();
                em.persist(district);
                em.getTransaction().commit();
                logger.info(district);
                response.setCode(ResponseCode.CREATED);
                response.setDescription("CREATED");
                response.setIsSuccess(true);
                response.setData(district);
                logger.info(response);
                return response;

            } else {
                logger.info(district);
                response.setCode(ResponseCode.CONFLICT);
                response.setDescription("Conflict");
                response.setIsSuccess(false);
                logger.info(response);
                return response;

            }

        } catch (PersistenceException ex) {
            logger.error(ex);
            System.out.println(ex.getMessage());
            if (em != null) {
                em.getTransaction().rollback();
            }
            response.setCode(ResponseCode.FAILED_DEPENDENCY);
            response.setDescription("Failed dependency.");
            response.setIsSuccess(false);
            return response;
        } catch (Exception ex) {
            logger.error(ex);
            System.out.println(ex.getMessage());
            response.setCode(ResponseCode.INTERNAL_SERVER_ERROR);
            response.setDescription("Failed to process request.");
            response.setIsSuccess(false);
            return response;
        } finally {
            if (em != null) {
                if (em.isOpen()) {
                    em.close();
                }
            }

        }
    }

    /**
     * *
     * Update district
     *
     * @param district
     * @param  id
     * @return
     */
    @RequestMapping(value = "/{id}", method = RequestMethod.PUT, produces = "application/json")
    @ResponseBody
    public ApiResponse updateDistrict(@PathVariable int id, @RequestBody District district) {
        ApiResponse response = new ApiResponse();
        BasicConfigurator.configure();
        EntityManagerFactory emf = null;
        EntityManager em = null;
        try {

            emf = Persistence.createEntityManagerFactory(Helper.PERSISTENCE_UNIT_NAME);
            em = emf.createEntityManager();
            District dist = em.find(District.class, id);
            em.getTransaction().begin();
            dist.setName(district.getName());
            dist.setIsActive(district.getIsActive());
            dist.setProvinceId(district.getProvinceId());
            em.getTransaction().commit();
            response.setCode(ResponseCode.CREATED);
            response.setDescription("CREATED");
            response.setIsSuccess(true);
            response.setData(district);
            logger.info(response);
            return response;

        } catch (PersistenceException ex) {
            logger.error(ex);
            System.out.println(ex.getMessage());
            if (em != null) {
                em.getTransaction().rollback();
            }
            response.setCode(ResponseCode.FAILED_DEPENDENCY);
            response.setDescription("Failed dependency.");
            response.setIsSuccess(false);
            return response;
        } catch (Exception ex) {
            logger.error(ex);
            System.out.println(ex.getMessage());
            response.setCode(ResponseCode.INTERNAL_SERVER_ERROR);
            response.setDescription("Failed to process request.");
            response.setIsSuccess(false);
            return response;
        } finally {
            if (em != null) {
                if (em.isOpen()) {
                    em.close();
                }
            }

        }
    }
}
/*
*要更改此许可证标题,请在“项目属性”中选择“许可证标题”。
*要更改此模板文件,请选择工具|模板
*然后在编辑器中打开模板。
*/
包装zw.co.telecel.camsapi.controllers;
导入java.util.List;
导入javax.persistence.EntityManager;
导入javax.persistence.EntityManagerFactory;
导入javax.persistence.persistence;
导入javax.persistence.PersistenceException;
导入javax.persistence.Query;
导入org.apache.log4j.basicConfiguration;
导入org.apache.log4j.Logger;
导入org.springframework.http.MediaType;
导入org.springframework.stereotype.Controller;
导入org.springframework.web.bind.annotation.PathVariable;
导入org.springframework.web.bind.annotation.RequestBody;
导入org.springframework.web.bind.annotation.RequestMapping;
导入org.springframework.web.bind.annotation.RequestMethod;
导入org.springframework.web.bind.annotation.ResponseBody;
进口zw.co.telecel.camsapi.entities.District;
导入zw.co.telecel.camsapi.utils.APIRESS;
导入zw.co.telecel.camsapi.utils.Helper;
导入zw.co.telecel.camsapi.utils.ResponseCode;
/**
*
*@author prime
*/
@控制器
@请求映射(“/districts”)
公共类分区控制器{
私有静态最终记录器=Logger.getLogger(UserController.class);
/**
*获取在系统中注册的所有地区
*
*@返回
*/
@RequestMapping(value=“/”,method=RequestMethod.GET,products=“application/json”)
@应答器
公共行政区(){
ApiResponse=新的ApiResponse();
BasicConfigurator.configure();
EntityManagerFactory emf=null;
EntityManager em=null;
试一试{
emf=Persistence.createEntityManagerFactory(Helper.Persistence\u UNIT\u NAME);
em=emf.createEntityManager();
Query Query=em.createNamedQuery(“District.findAll”);
List districts=query.getResultList();
if(districts.isEmpty()){
logger.info(地区);
response.setCode(未找到ResponseCode);
响应。设置描述(“未找到”);
response.setissusccess(false);
答复.setData(地区);
logger.info(响应);
返回响应;
}否则{
logger.info(地区);
response.setCode(ResponseCode.FOUND);
响应。设置说明(“发现”);
response.setissusccess(true);
答复.setData(地区);
logger.info(响应);
返回响应;
}
}catch(PersistenceException-ex){
记录器错误(ex);
response.setCode(ResponseCode.FAILED_依赖项);
setDescription(“失败的依赖项”);
response.setissusccess(false);
返回响应;
}捕获(例外情况除外){
记录器错误(ex);
response.setCode(ResponseCode.INTERNAL\u SERVER\u错误);
response.setDescription(“未能处理请求”);
response.setissusccess(false);
返回响应;
}最后{
如果(em!=null){
如果(em.isOpen()){
em.close();
}
}
}
}
/**
* *
*凭身份证进入地区
*
*@param-id
*@返回
*/
@RequestMapping(value=“/{id}”,method=RequestMethod.GET,products=“application/json”)
@应答器
公共ApiResponse getDistrict(@PathVariable整数id){
ApiResponse=新的ApiResponse();
BasicConfigurator.configure();
EntityManagerFactory emf=null;
EntityManager em=null;
试一试{
emf=Persistence.createEntityManagerFactory(Helper.Persistence\u UNIT\u NAME);
em=emf.createEntityManager();
Query Query=em.createNamedQuery(“District.findById”);
query.setParameter(“id”,id);
List districts=query.getResultList();
if(districts.isEmpty()){
logger.info(地区);
response.setCode(未找到ResponseCode);
响应。设置描述(“未找到”);
response.setissusccess(false);
答复.setData(地区);
logger.info(响应);
返回响应;
}否则{
logger.info(地区);
response.setCode(ResponseCode.FOUND);
响应。设置说明(“发现”);
response.setissusccess(true);
答复.setData(地区);
logger.info(响应);
返回响应;
}
}catch(PersistenceException-ex){
记录器错误(ex);
response.setCode(ResponseCode.FAILED_依赖项);
setDescription(“失败的依赖项”);
response.setissusccess(false);
返回响应;
}捕获(例外情况除外){
记录器错误(ex);
response.setCode(ResponseCode.INTERNAL\u SERVER\u错误);
response.setDescription(“未能处理请求”);
response.setissusccess(false);
返回响应;
}最后{
如果(em!=null){
如果(em.isOpen()){
em.close();
}
}
}
}
/**
* *
*创建新区
*
*@param区
*@返回
*/
@再
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package zw.co.telecel.camsapi.entities;

import java.io.Serializable;
import java.util.Collection;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author tinashehondo
 */
@Entity
@Table(name = "District")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "District.findAll", query = "SELECT d FROM District d"),
    @NamedQuery(name = "District.findById", query = "SELECT d FROM District d WHERE d.id = :id"),
    @NamedQuery(name = "District.findByName", query = "SELECT d FROM District d WHERE d.name = :name"),
    @NamedQuery(name = "District.findByIsActive", query = "SELECT d FROM District d WHERE d.isActive = :isActive")})
public class District implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "Id")
    private Integer id;
    @Basic(optional = false)
    @Column(name = "Name")
    private String name;
    @Basic(optional = false)
    @Column(name = "IsActive")
    private boolean isActive;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "districtId")
    private Collection<Ward> wardCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "districtId")
    private Collection<Farm> farmCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "districtId")
    private Collection<Farmer> farmerCollection;
    @JoinColumn(name = "Province_Id", referencedColumnName = "Id")
    @ManyToOne(optional = false)
    private Province provinceId;

    public District() {
    }

    public District(Integer id) {
        this.id = id;
    }

    public District(Integer id, String name, boolean isActive) {
        this.id = id;
        this.name = name;
        this.isActive = isActive;
    }

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public boolean getIsActive() {
        return isActive;
    }

    public void setIsActive(boolean isActive) {
        this.isActive = isActive;
    }

    @XmlTransient
    public Collection<Ward> getWardCollection() {
        return wardCollection;
    }

    public void setWardCollection(Collection<Ward> wardCollection) {
        this.wardCollection = wardCollection;
    }

    @XmlTransient
    public Collection<Farm> getFarmCollection() {
        return farmCollection;
    }

    public void setFarmCollection(Collection<Farm> farmCollection) {
        this.farmCollection = farmCollection;
    }

    @XmlTransient
    public Collection<Farmer> getFarmerCollection() {
        return farmerCollection;
    }

    public void setFarmerCollection(Collection<Farmer> farmerCollection) {
        this.farmerCollection = farmerCollection;
    }

    public Province getProvinceId() {
        return provinceId;
    }

    public void setProvinceId(Province provinceId) {
        this.provinceId = provinceId;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof District)) {
            return false;
        }
        District other = (District) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "zw.co.telecel.camsapi.entities.District[ id=" + id + " ]";
    }

}
<?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>zw.co.telecel</groupId>
    <artifactId>CAMSAPI</artifactId>
    <version>1.0</version>
    <packaging>war</packaging>

    <name>CAMSAPI</name>

    <properties>
        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring.version>4.0.1.RELEASE</spring.version>
        <jackson.version>1.9.10</jackson.version>
        <jdk.version>1.6</jdk.version>
        <log4j.version>1.2.17</log4j.version>
    </properties>

    <dependencies>

        <!-- Spring 3 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>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- Jackson JSON Mapper -->
        <!--        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>${jackson.version}</version>
        </dependency>-->
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.1</version>
        </dependency>

        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>eclipselink</artifactId>
            <version>2.5.2</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId>
            <version>2.5.2</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.10</version>
            <type>jar</type>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <compilerArguments>
                        <endorseddirs>${endorsed.dir}</endorseddirs>
                    </compilerArguments>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${endorsed.dir}</outputDirectory>
                            <silent>true</silent>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>javax</groupId>
                                    <artifactId>javaee-endorsed-api</artifactId>
                                    <version>7.0</version>
                                    <type>jar</type>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>
<body>
        <h1>HTTP Status 415 - Unsupported Media Type</h1>
        <hr/>
        <p>
            <b>type</b> Status report
        </p>
        <p>
            <b>message</b>Unsupported Media Type
        </p>
        <p>
            <b>description</b>The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.
        </p>
        <hr/>
        <h3>GlassFish Server Open Source Edition  4.1.1 </h3>
    </body>
@RequestMapping(value = "/", method = RequestMethod.GET, produces = "application/json", consumes = MediaType.APPLICATION_JSON_VALUE)