java - 如何在 Java 中使用套接字发送 JSON 响应

标签 java gson dataoutputstream

我已经构建了一个基本的 HTTP 服务器,我正在尝试发送对 GET 请求的回复。我已经安装了 Gson 作为 JSON 解析器,但我不确定如何将响应编码为 JSON 并发送回客户端。

这是我的代码,非常感谢任何帮助。 (实际响应的最后一种方法)

public class HttpServer extends Thread{

    //Private variables
    private Socket connectedClient = null;
    private BufferedReader clientRequest = null;
    private DataOutputStream responseToClient = null;

    /**
     * Public constructor
     * @param client
     */
    public HttpServer(Socket client){
        connectedClient =client;
    }

    /**
     * Code to execute on thread
     */
    public void run(){

        try {

            //Log new client
            System.out.println("The client " + connectedClient.getInetAddress() + 
                    ":" + connectedClient.getPort() + " is connected");

            //Get the client request
            clientRequest = new BufferedReader(new InputStreamReader(connectedClient.getInputStream()));

            //Start response object
            responseToClient = new DataOutputStream(connectedClient.getOutputStream());

            //Process the request
            processClientRequest();

            //Close buffered writer
            responseToClient.close();
        } catch (Exception e) {

            //Print error
            e.printStackTrace();
        }
    }

    /**
     * Parses a client request and calls the approriate handler
     * @throws Exception
     */
    private void processClientRequest() throws Exception{

        String requestString = clientRequest.readLine();

        String header = requestString;

        //Break up request
        StringTokenizer tokenizer = new StringTokenizer(header);

        //Different request parts
        String httpMethod = tokenizer.nextToken();
        String httpQueryString = tokenizer.nextToken();

        //Print client request
        StringBuffer responseBuffer = new StringBuffer();
        while (clientRequest.ready()) {
            responseBuffer.append(requestString + " ");
            System.out.println(requestString);

            requestString = clientRequest.readLine();
        }
        //ID GET request
        if (requestString.equals("GET")) {
            if (httpQueryString.equals("/")) {
                sendResponse();

            }   
        }
    }

    /**
     * Sends reply back to client
     * @throws Exception
     */
    private void sendResponse() throws Exception{

        HashMap<String, String> mapResponse = new HashMap<String, String>();
        mapResponse.put("A", "Hands");
        mapResponse.put("B", "Feet");

        //Convert to JSON and send back to client
        //?????????????????????????????
    }
}

最佳答案

不只是:

Gson gson = new Gson();
String json = gson.toJson(mapResponse);
//Other code to send it back to client

关于java - 如何在 Java 中使用套接字发送 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16968595/

相关文章:

java - 以多部分数据或多个部分的形式发送大型响应 Json

java - 一个接口(interface)有两个类型参数。我可以实现两种类型相同的接口(interface),以便它们兼容吗?

java - 如何通过上传 .war 文件在 tomcat 上部署 java webapp

java - 如何使用 Gson 将对象的 JSON 字符串转换为 ArrayList?

java - 使用 DataOutputStream 写入偏移量

java - 为什么我的@Transactional方法在测试时没有回滚?

android - 应用程序崩溃(有时)并出现致命信号 11 (SIGSEGV),代码 1

java - 读取大文件并通过多线程处理

java - 为什么 DataOutputStream 的 writeByte() 和 ObjectOutputStream 的 writeByte() 写入的字节不一样?

java - 使用 DataOutputStream 时出现奇怪的输出