尝试访问使用 Jersey 开发的 POST Json 消费者端点时获取不受支持的媒体类型
Getting Unsupported Media Type when trying to access POST Json consumer endpoint developed using Jersey
当我尝试执行我的 POST 网络服务方法时出现此错误:
我正在使用 Postman 发送请求:
我的实体如下:
@Entity
@XmlRootElement
@Table(name = "bandeiras")
public class BandeiraCartao extends EntidadeBase {
private static final long serialVersionUID = 5944226798248177637L;
@XmlElement
@Column(length = 60, nullable = false)
private String nome;
@XmlElement
@Column(nullable = false)
private Integer codigoImagem;
//getters and setters//
}
这是超类:
@MappedSuperclass
public abstract class EntidadeBase implements Serializable {
private static final long serialVersionUID = -3912856473903279467L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@PodamStrategyValue(value = NullStrategy.class)
private Long id;
@Column(name = "cadastro_data", nullable = false)
@PodamStrategyValue(value = PastDateStrategy.class)
private LocalDate dataCadastro;
@Column(name = "modificado_data", nullable = false)
@PodamStrategyValue(value = PastDateStrategy.class)
private LocalDate dataModificacao;
@Column(nullable = false)
@PodamBooleanValue(boolValue = false)
private Boolean modificado;
@Column(nullable = false)
@PodamBooleanValue(boolValue = true)
private Boolean ativo;
//getters and setters//
}
最后是我调用的端点方法:
@Path("/bandeira")
public class BandeiraCartaoResource extends AbstractResource<BandeiraCartao> {
private static final long serialVersionUID = 7080737992715054407L;
@POST
@Override
@Transactional
public Response inserir(@NotNull BandeiraCartao entidade) {
return super.inserir(entidade);
}
...
}
我添加了 Genson 依赖项,以便不必提供我自己的 MessageBodyWritter 实现。
我还添加了 MOXy jersey 依赖项试图解决这个问题,但它没有用。
作为附加信息,它的 运行 在 tomcat 8 上。
有线索吗?
根据我刚刚测试的...
在 post 中简单地使用 JSON 原始类型并没有设置所需的 header。您可以单击 Preview 按钮,它会显示整个请求的预览,包括 headers。你需要的是一个headerContent-Type:application/json
。您会在预览中看到它不存在 window。您可以使用主屏幕上的 Headers 按钮进行设置。只需将 Header
设置为 Content-Type
并将 value
设置为 application/json
。
更新
如果您打开 Chrome 开发人员工具并发出请求(select "Network/XHR" 选项卡),您可以看到设置的默认 headers与 XHR 请求。它实际上不仅仅是您在 Postman 预览 window 中看到的 Cache-Control
。您会看到它明确地将内容类型设置为 text/plain
当我尝试执行我的 POST 网络服务方法时出现此错误:
我正在使用 Postman 发送请求:
我的实体如下:
@Entity
@XmlRootElement
@Table(name = "bandeiras")
public class BandeiraCartao extends EntidadeBase {
private static final long serialVersionUID = 5944226798248177637L;
@XmlElement
@Column(length = 60, nullable = false)
private String nome;
@XmlElement
@Column(nullable = false)
private Integer codigoImagem;
//getters and setters//
}
这是超类:
@MappedSuperclass
public abstract class EntidadeBase implements Serializable {
private static final long serialVersionUID = -3912856473903279467L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@PodamStrategyValue(value = NullStrategy.class)
private Long id;
@Column(name = "cadastro_data", nullable = false)
@PodamStrategyValue(value = PastDateStrategy.class)
private LocalDate dataCadastro;
@Column(name = "modificado_data", nullable = false)
@PodamStrategyValue(value = PastDateStrategy.class)
private LocalDate dataModificacao;
@Column(nullable = false)
@PodamBooleanValue(boolValue = false)
private Boolean modificado;
@Column(nullable = false)
@PodamBooleanValue(boolValue = true)
private Boolean ativo;
//getters and setters//
}
最后是我调用的端点方法:
@Path("/bandeira")
public class BandeiraCartaoResource extends AbstractResource<BandeiraCartao> {
private static final long serialVersionUID = 7080737992715054407L;
@POST
@Override
@Transactional
public Response inserir(@NotNull BandeiraCartao entidade) {
return super.inserir(entidade);
}
...
}
我添加了 Genson 依赖项,以便不必提供我自己的 MessageBodyWritter 实现。 我还添加了 MOXy jersey 依赖项试图解决这个问题,但它没有用。 作为附加信息,它的 运行 在 tomcat 8 上。 有线索吗?
根据我刚刚测试的...
在 post 中简单地使用 JSON 原始类型并没有设置所需的 header。您可以单击 Preview 按钮,它会显示整个请求的预览,包括 headers。你需要的是一个headerContent-Type:application/json
。您会在预览中看到它不存在 window。您可以使用主屏幕上的 Headers 按钮进行设置。只需将 Header
设置为 Content-Type
并将 value
设置为 application/json
。
更新
如果您打开 Chrome 开发人员工具并发出请求(select "Network/XHR" 选项卡),您可以看到设置的默认 headers与 XHR 请求。它实际上不仅仅是您在 Postman 预览 window 中看到的 Cache-Control
。您会看到它明确地将内容类型设置为 text/plain