Java 如何修改spring服务以生成jsonl

Java 如何修改spring服务以生成jsonl,java,json,spring,spring-web,jsonlines,Java,Json,Spring,Spring Web,Jsonlines,我有一个服务消费者,他希望我的服务产生行分隔符。如何修改Jackson解析器或提供自定义序列化程序,以便将返回的对象数组序列化为JSONL而不是JSON 例如,下面的代码 import java.util.Arrays; import org.apache.commons.lang3.tuple.Pair; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigu

我有一个服务消费者,他希望我的服务产生行分隔符。如何修改Jackson解析器或提供自定义序列化程序,以便将返回的对象数组序列化为JSONL而不是JSON

例如,下面的代码

import java.util.Arrays;

import org.apache.commons.lang3.tuple.Pair;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class JsonlServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(JsonlServiceApplication.class, args);
    }


    @GetMapping("jsonl")
    private ResponseEntity<?> getJsonl(){
        Pair<String, String> p1 = Pair.of("foo", "baa");
        Pair<String, Integer> p2 = Pair.of("key", 10);

        return new ResponseEntity(Arrays.asList(p1, p2), HttpStatus.OK);
    }
}
但消费者希望:

{"foo": "baa"}
{"key": 10}

也许您可以将json解析为一个对象[],并在每个元素上迭代?就像这样:

public static void main(String[] args) {
        String json = "[{\"foo\":\"baa\"},{\"key\":10}]";
        Gson gson = new Gson();
        Object yourObj[] = gson.fromJson(json, Object[].class);
        Arrays.stream(yourObj).forEach(e -> {
            System.out.println(e);
        });
    }

消费者可以这样做,但这无助于使服务产生Json。你不应该这样做,如果你的消费者不能处理标准Json,那么纠正应该是消费者方面,而不是生产者方面。我倾向于同意,他们不会;-)这么说你疯了;-)尽最大努力改变Json消费者团队的想法。我正在考虑协商使用Spring一次一个对象返回RxJava
Observable
或Spring
Flux
对象。可能是一个令人愉快的妥协。我不同意,如果你对jsonl有要求,你应该试着实现你的要求。不要试图交付你认为最有效的东西。
public static void main(String[] args) {
        String json = "[{\"foo\":\"baa\"},{\"key\":10}]";
        Gson gson = new Gson();
        Object yourObj[] = gson.fromJson(json, Object[].class);
        Arrays.stream(yourObj).forEach(e -> {
            System.out.println(e);
        });
    }