gpt4 book ai didi

java - 在 REST POST 调用期间未从继承对象获取所有属性

转载 作者:太空宇宙 更新时间:2023-11-04 10:07:46 25 4
gpt4 key购买 nike

我在 REST POST 调用方面遇到一些问题。我正在使用 JSON 对象。假设我有以下 2 门类(class)

Class Parent extends Serializable
{
private static final long serialVersionUID = 1L;
@Key
protected String Market;
@Key
protected String Symbol;
}

Class Child extends Parent
{
private static final long serialVersionUID = -4252878751127065794L;
private Double strikePrice;
private String optionType;
}

@POST
@Path("/addProduct")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response addProduct(Child child) {
--somecode--
}

现在我通过 Postman 传递 JSON 以及所有属性,其中还包括父类中的所有属性。但是当我调试这个子对象时,它没有提供父属性。我需要为此使用 GSON 或任何其他库吗?

JSON
{
"Market": "BSE",
"Symbol": "Infosys",
"strikePrice": 100,
"optionType": "Put"
}

我只能看到 StrikePrice 和 optionType 的数据。

最佳答案

我找到了一个解决方案。我们需要为自定义响应添加 MessageBodyReader。我不知道最佳实践,但它会毫无问题地工作。

import java.io.IOException;
import java.io.InputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.util.Scanner;

import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.MessageBodyReader;
import javax.ws.rs.ext.Provider;
import javax.ws.rs.ext.Providers;

import common.SerializeUtil;

@Provider
public class CustomMessageBodyReader implements MessageBodyReader<Child> {

@Context
private Providers providers;

@Override
public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
// TODO Auto-generated method stub
return Parent.class.isAssignableFrom(type);
}

@Override
public Child readFrom(Class<Child> type, Type genericType, Annotation[] annotations, MediaType mediaType,
MultivaluedMap<String, String> httpHeaders, InputStream entityStream)
throws IOException, WebApplicationException {
String entity = toString(entityStream);
Child child = SerializeUtil.fromString(entity, Child.class);
return child;
}

public static String toString(InputStream inputStream) {
return new Scanner(inputStream, "UTF-8")
.useDelimiter("\\A").next();
}

}

您还需要将其注册到您的服务配置中,如下所示

ResourceConfig resourceConfig = new ResourceConfig();
resourceConfig.register(CustomMessageBodyReader.class);

请随时提供最佳解决方案。

关于java - 在 REST POST 调用期间未从继承对象获取所有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52737396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com