【问题标题】:Rest API POST Content type 'application/json;charset=UTF-8' not supported不支持 Rest API POST 内容类型 'application/json;charset=UTF-8'
【发布时间】:2018-12-03 08:33:05
【问题描述】:

这是我的休息后控制器

@RestController
@RequestMapping(path="/entry")
public class EntryController {
    @RequestMapping(method=RequestMethod.POST)
        @ResponseBody
        public void addEntry(@RequestBody Entry entry){
            service.save(entry);
        }
}

当我用soapui做请求时,我在日志中得到这个错误

org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/json;charset=UTF-8' not supported
        at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:237)
        at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:150)
        at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:128)
        at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)
        at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:160)
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:129)
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963

【问题讨论】:

  • 检查你的 getter/setter。如果您在未设置所有参数的情况下发送实体,则可能会导致此错误。您是否在请求正文中映射整个对象?
  • 不,这是数据库需要的部分。这些不是所有参数。
  • 我曾经遇到过同样的问题,它导致了它。你会提供实体映射吗?另外,尝试在类级别包含@JsonIgnoreProperties(ignoreUnknown=true) 注释。
  • 您的意思是实体类上的@JsonIgnoreProperties(ignoreUnknown=true) 是吗?也许问题是因为我坚持实体,而不是模型?

标签: java spring rest post jakarta-ee


【解决方案1】:

这是我的入门课

package pl.primigenius.tsprimi.entity;

import com.fasterxml.jackson.annotation.JsonBackReference;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;

/**
 *
 * @author Kamil
 */

@Entity
@Table(name="Entry")
@NamedQueries({
    @NamedQuery(name="Entry.findAllEntries", query="SELECT e FROM Entry e"),
    @NamedQuery(name="Entry.findEntryByID", query="SELECT e FROM Entry e WHERE e.id = :ID"),
    @NamedQuery(name="Entry.findByUserID", query="SELECT e FROM Entry e WHERE e.user.id = :userID"),
    @NamedQuery(name="Entry.findByProjectID", query="SELECT e FROM Entry e WHERE e.project.id = :projectID"),
})
public class Entry extends BaseEntityAudit {

    @ManyToOne
    @JoinColumn(name="USER_ID", nullable=false)
    @JsonBackReference
    private User user;

    @ManyToOne
    @JoinColumn(name="PROJECT_ID", nullable=false)
    @JsonBackReference
    private Project project;

    @Column(name="HOURS", nullable=false)
    private BigDecimal hours;

    @Column(name="COMMENT")
    private String comment;

    @Column(name="POST_DATE")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date postDate;

    public User getUser() {
        return user;
    }

    public Project getProject() {
        return project;
    }

    public BigDecimal getHours() {
        return hours;
    }

    public String getComment() {
        return comment;
    }

    public Date getPostDate() {
        return postDate;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public void setProject(Project project) {
        this.project = project;
    }

    public void setHours(BigDecimal hours) {
        this.hours = hours;
    }

    public void setComment(String comment) {
        this.comment = comment;
    }

    public void setPostDate(Date postDate) {
        this.postDate = postDate;
    }





}

【讨论】:

  • 我尝试使用虚拟UserProject 重现该问题,但没有出现错误。请附上 UserProjectBaseEntityAudit 类 - 它们可能会导致问题
猜你喜欢
  • 2019-12-16
  • 2018-07-24
  • 2015-11-01
  • 1970-01-01
  • 2016-12-07
  • 1970-01-01
  • 2018-08-06
  • 2015-03-26
  • 2020-03-20
相关资源
最近更新 更多