Home > Back-end >  Spring boot: Expected json responses, getting XML responses
Spring boot: Expected json responses, getting XML responses

Time:11-19

I'm running a simple Spring boot application that retrieves details of countries from a MySQL database. The initial responses I got while running the application were in json. However, after a few edits in the application.properties file, I get my reponses in XML now. Any way to revert back to json reponses? This application is a part of a microservice application I'm trying to build with Spring cloud gateway and Eureka server.

application.properties

spring.jpa.hibernate.ddl-auto = update
spring.datasource.url= jdbc:mysql://localhost:3306/countries-microservice
spring.datasource.username= root
spring.datasource.password= 
spring.datasource.driver-class-name= com.mysql.cj.jdbc.Driver
spring.application.name=countries-service
server.port=3001
eureka.client.serviceUrl.defaultZone=http://localhost:3000/eureka/

CountryRepository.java

package com.example.countriesservice.repository;

import com.example.countriesservice.model.Country;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface CountryRepository extends JpaRepository<Country, String> {
    Country findByCountry(String country);
}

CountryService.java

package com.example.countriesservice.service;

import java.util.List;

import com.example.countriesservice.model.Country;
import com.example.countriesservice.repository.CountryRepository;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class CountryService {
    private final CountryRepository countryRepository;

    @Autowired
    public CountryService(CountryRepository countryRepository) {
        this.countryRepository = countryRepository;
    }

    public List<Country> getAllCountries() {
        return countryRepository.findAll();
    }

    public Country getCountry(String country) {
        return countryRepository.findByCountry(country);
    }
}

CountryController.java

package com.example.countriesservice.controller;

import com.example.countriesservice.service.CountryService;

import java.util.List;

import com.example.countriesservice.model.Country;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RequestMapping("/countries")
@RestController
public class CountryController {

    private final CountryService countryService;

    @Autowired
    public CountryController(CountryService countryService) {
        this.countryService = countryService;
    }

    @GetMapping("/getAll")
    public List<Country> getAll() {
        return countryService.getAllCountries();
    }

    @GetMapping("/{country}")
    public Country getCountry(@PathVariable String country) {
        return countryService.getCountry(country);
    }
}

Output Output after running the Spring Boot application

Since I am still learning Spring Boot it would be great if you could explain what am I doing wrong and how to correct it in a bit detail.

CodePudding user response:

Explicitly mention that a json response is required.

In CountryController.java

import org.springframework.http.MediaType;

@GetMapping(value = "/getAll", produces = { MediaType.APPLICATION_JSON_VALUE })
public List<Country> getAll() {
    return countryService.getAllCountries();
}

@GetMapping(value = "/{country}", produces = { MediaType.APPLICATION_JSON_VALUE })
public Country getCountry(@PathVariable String country) {
    return countryService.getCountry(country);
}
  • Related