Spring boot Java modyfikacja Stringa żeby wyglądał jak JSON

0

Obecnie otrzymuje od klienta takiego Stringa: String, który otrzymuję i chcę żeby go zmodyfikować tak, żeby wyglądał jak JSON. Jak widać obecnie nie jest rozpoznawany jako JSON przez znak ucieczki . Oto mój kod:

    @RestController
    public class EndlessBlowReportController {
        
        public int counter;
    
        @Autowired
        public static final Properties defaultProperties = new Properties();
    
        @PostMapping("/add_report")
        public String addReport(@RequestBody String report) {
            try {
                report = report.replaceAll("/","");
                defaultProperties.put(counter, report);
                counter++;
    
            } catch (Exception ex) {
                System.out.println(ex.getMessage());
            }
            return "Email has been sent";
        }
    
        @GetMapping("/get_reports")
        public List<String> getReports() {
            List<String> reports = new ArrayList<>();
            try {
                for(int i=0;i<defaultProperties.size();i++) {
                reports.add((String) defaultProperties.get(i));
                }
            } catch (Exception ex) {
            }
            return reports;
        }

jak widać próbowałem na własną rękę naprawić tego buga poprzez takie coś, że przed dodaniem stacktrace do propertiesów próbuje modyfikować Stringa poprzez str.replace i zamienić / na empty stringa. Ale nic to nie daje, String jest cały czas taki sam z dodatkowymi znakami uciekającymi, przez co nie wyświetla mi się w przeglądarce jako JSON. Jak to naprawić?

**Podejrzewam, że należy usunąć znak ucieczki \ zarówno z add_report jak i get_reports ale nie wiem jak albo jeszcze lepiej wyświetlać od razu sensownego JSONa ale jak.
**
Pozdro

1

o_O Ale wiesz ze ten znak ucieczki to dodaje ci spring jak odsyła ten twój payload robiłąc jsona z listy stringów? :D

  1. Albo musiałbyś odesłać tu content-type text/plain i sformować jsona "ręcznie"
  2. Albo jak człowiek zrób sobie klasy DTO które zostaną automatycznie przerobione na jsona. Czyli u ciebie miałbyś klasę która ma pola reportId, appVersionName, packageName itd
  3. Albo odeślij to jako Map<String,String>
  4. Albo w ogóle return defaultProperties bo properties to jakaś hashmapa pod spodem i też się z niej zrobi normalny json od kopa.
0

Oto mój przerobiony kod:

ReportJson.java

@Data
public class ReportJson {
    
String reportId, appVersionName, packageName;
}
    @RestController
    public class EndlessBlowReportController {
        
        public int counter;
    
        @Autowired
        public static final Properties defaultProperties = new Properties();
    
        @PostMapping("/add_report")
        public void addReport(@RequestBody ReportJson report) {
            try {
                report = report.replaceAll("/","");
                defaultProperties.put(counter, report);
                counter++;
            } catch (Exception ex) {
            }
        }
    
    @GetMapping("/get_reports")
    public List<ReportJson> getReports() {
        List<ReportJson> reports = new ArrayList<>();
        for(int i=0; i<defaultProperties.size(); i++) {
            reports.add((ReportJson) defaultProperties.get(i));
        }
        return reports;
    }

ale nadal jest coś nie tak, poszczególne pola dają wartość null. Ale nazwy tych pól nie wyglądają jak te w oryginale więc może coś z tym związane? Jak zmieniłem nazwy tych pól na te odpowiadające JSONowi to nadal ta nazwa w wyniku się różni.

Pozdro

0

(ReportJson) defaultProperties.get(i)

xD Ty sobie robisz jaja jakieś? Umiesz cokolwiek programować w Javie? W ogóle dziwi mnie ze to się nie wysypało z jakimś ClassCastException. Nie da się tak magicznie zrzutować. Musisz stworzyć obiekt ReportJson i wypełnić go danymi. Niemniej nadal nie rozumiem czemu nie zwrócisz tego co siedzi w tych twoich properties. Co to są za obiekty?

edit: no dobra skoro wkładasz tam obiekty typu ReportJson to powinno być ok. Zgaduje ze teraz źle te dane wysyłasz. Bo teraz tam gdzie wysyłasz JSONa musisz mieć pasujące do siebie nazwy pól.

1

Ja niestety nie pomogę bo mnie zabił ten counter i static final. Weź to zrob jak człowiek, napisz jakiś test albo po prostu zdebuguj.

1 użytkowników online, w tym zalogowanych: 0, gości: 1