我有一个使用以下方法的会话Bean:
@POST
@Consumes("application/x-www-form-urlencoded")
@Path("/calculate")
@Produces("application/json")
public CalculationResult calculate(@FormParam("childProfile") String childProfile,
@FormParam("parentProfile") String parentProfile) {
...
}
Run Code Online (Sandbox Code Playgroud)
返回的CalculationResult无法映射到JSON,并发生以下异常:
Caused by: com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class com.test.UniqueName and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)...
Run Code Online (Sandbox Code Playgroud)
如何SerializationFeature在Wildfly中配置Jackson及其?
我已经看过" 杰克逊动态属性名称 "的问题,但它并没有真正回答我的问题.
我想反序列化这样的东西:
public class Response<T> {
private String status;
private Error error;
private T data;
}
Run Code Online (Sandbox Code Playgroud)
但是数据可以具有不同的名称,因为存在不同的服务并且返回具有不同数据的相同结构.例如'用户'和'合同':
{
response: {
status: "success",
user: {
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
要么
{
response: {
status: "failure",
error : {
code : 212,
message : "Unable to retrieve contract"
}
contract: {
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想像我这样对我的响应对象进行泛化:
public class UserResponse extends Response<User> {}
Run Code Online (Sandbox Code Playgroud)
我尝试了以下但我不确定这是我的用例,或者是否不以良好的方式使用它:
@JsonTypeInfo(include = As.WRAPPER_OBJECT, use = Id.CLASS)
@JsonSubTypes({@Type(value = User.class, name = "user"),
@Type(value = Contract.class, name …Run Code Online (Sandbox Code Playgroud) 我们如何使 JSON 属性名称动态化。例如
public class Value {
@JsonProperty(value = "value")
private String val;
public void setVal(String val) {
this.val = val;
}
public String getVal() {
return val;
}
}
Run Code Online (Sandbox Code Playgroud)
序列化此对象时,它被保存为{"value": "actual_value_saved"},但我想让密钥也像 一样动态{"new_key": "actual_value_saved"}。任何帮助深表感谢。