我试图利用Java多态性。我用Spring Boot构建了一个简单的CRUD应用程序,我想用Postman测试它...
问题是,我有下一个例外:
WARN 4576--[nio-8080-exec-2].w.s.m.s.DefaultHandlerExceptionResolver:Resolved[org.springframework.http.converter.httpMessageNodeAbleException:JSON解析错误:无法解析[simple type,class.com.shoppingprojectwithhibernate.PromotionsModule.Domain.Promotions]的子类型:缺少类型id属性“PromotionSeason”(用于POJO属性“PromotionSeason”);嵌套异常是com.fasterxml.jackson.databind.exc.invalidTypeIdeException:无法解析[simple type,class com.balabasciuc.shoppingprojectwithhibernate.PromotionModule.Domain.Promotion Season]的子类型:缺少类型id属性“PromotionSeason”(用于POJO属性“PromotionSeason”)
当我尝试向endpoint发出POST请求时,该endpoint返回一个接口,并且在运行时可以是任何子类型,我在这里滚动了解决方案,我使用了杰克逊从其他解决方案中使用的解决方案,但到目前为止没有一个对我有效,你能给我一个提示吗?
my interface:
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "promotionSeason")
@JsonSubTypes(
{
@JsonSubTypes.Type(value = PromotionChristmasSeason.class, name = "christmasPromotion"),
@JsonSubTypes.Type(value = PromotionEasterSeason.class, name = "easterPromotion"),
@JsonSubTypes.Type(value = NoPromotionForYouThisTimeMUHAHA.class, name = "noPromotion")
})
public interface PromotionSeason {
String isSeason();
Interface subtype:
@JsonTypeName(value = "noPromotion")
public class NoPromotionForYouThisTimeMUHAHA implements PromotionSeason {
Promotion class Entity constructor:
public Promotion(int numberOfProductsAtPromotion, PromotionSeason promotionSeason) {
this.numberOfProductsAtPromotion = numberOfProductsAtPromotion;
this.promotionSeason = promotionSeason;
}
Rest Controller class
@RestController
@RequestMapping(value = "/promotions")
public class PromotionController {
@PostMapping(value = "/createPromotion")
public ResponseEntity<String> createPromotion(@RequestBody Promotion promotion)
{
promotionService.createPromotion(promotion);
return ResponseEntity.status(HttpStatus.CREATED)
.body("Done");
}
Postman request:
{
"numberOfProductsAtPromotion" : 20,
"promotionSeason" : "noPromotion"
}
Postman response:
{
"timestamp": "2022-05-04T18:58:06.873+00:00",
"status": 400,
"error": "Bad Request",
"path": "/promotions/createPromotion"
}
Spring Response:
2022-05-04 21:19:44.374 WARN 4576 --- [nio-8080-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Could not resolve subtype of [simple type, class com.shoppingprojectwithhibernate.PromotionsModule.Domain.PromotionSeason]: missing type id property 'promotionSeason' (for POJO property 'promotionSeason'); nested exception is com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve subtype of [simple type, class com.balabasciuc.shoppingprojectwithhibernate.PromotionsModule.Domain.PromotionSeason]: missing type id property 'promotionSeason' (for POJO property 'promotionSeason')<EOL> at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 3, column: 25] (through reference chain: com.shoppingprojectwithhibernate.PromotionsModule.Domain.Promotion["promotionSeason"])]
这一直是我糟糕的发帖请求,而不是:
邮递员请求:
{
"numberOfProductsAtPromotion" : 20,
"promotionSeason" : "noPromotion" }
它应该是:
{
"numberOfProductsAtPromotion" : 20,
"promotionSeason" : { // "promotionSeason" is class instance var from Promotion Entity class
"promotionSeason" : "noPromotion" // "promotionSeason" is defined on interface level: `@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "promotionSeason")`
//"noPromotion" is defined on interface and subtype levels
//any more subtype(subclass) variables to init if any
}
检查此项:https://www.youtube.com/watch?v=IlLC3Yetil0
你有没有为你这段时间买单的?如果在所有实现中都有“Type”,则可以将interfaceto更改为抽象类并在此处添加变量。
任何人都可以在下面帮助我吗? 是否可以通过POSTMAN运行SOAP Get Request? 如果是这样,请提供一些链接或步骤,因为我得到错误
我正在使用postman编写一些测试脚本和数据清理脚本,我想知道是否可以对上一步产生的数组结果运行一个请求。 例如,我有一个API,它以JSON的形式返回任务,如下所示: 因此,在测试脚本中,我运行此命令来收集ID数组: 下一个请求是删除一个任务,但是API一次只删除一个。我试着做一些事情,比如: 我希望Postman会看到是一个数组和简单的“工作”,但事实似乎并非如此。有没有可能根据数组输入多次
我遇到了一个奇怪的问题。对于单个HTTP请求,我的servlet的doGet方法被多次调用。每隔10-12秒重新运行一次,直到初始过程完成。 下面是我的servlet代码 下面是web.xml中的映射 我使用的是SEAM和JSF,但这是一个独立的servlet。日志中也没有例外。我还验证了INIT方法只被调用一次。重复的是服务方法。所有重新运行的标识哈希代码都是相同的(System.Identit
主要内容:1 HTTP请求方法1 HTTP请求方法 对于HTTP/1.1协议,定义了一组通用的HTTP请求方法。可以根据要求扩展这些方法。这些方法的名称区分大小写,必须使用大写字母。 请求方法 说明 GET 请求指定的页面信息,并返回实体主体。 HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可
根据HTTP标准,HTTP请求可以使用多种请求方法。 HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。 HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。 序号 方法 描述 1 GET 请求指定的页面信息,并返回实体主体。 2 HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 3
本文向大家介绍java发送http get请求的两种方式,包括了java发送http get请求的两种方式的使用技巧和注意事项,需要的朋友参考一下 长话短说,废话不说 一、第一种方式,通过HttpClient方式,代码如下: 二、第二种方式,通过流的形式,贴代码: 这两种实现方式不同,怎么使用看个人喜好吧,不过我在项目开发过程中,使用流的方式部署在预发机(linux机器)上会出现返回null的情况