Reputation: 23
I am consuming a spring boot application, On hitting the "/test/api" rest end point with a GET request from Postman, I am getting below error:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "userName" (class com.example.MyPojo), not marked as ignorable (0 known properties: ])
The service I am trying to consume produces response in below format.
@Getter
@Setter
public class MyResponse extends MyPojo {
int responseCode;
String responseMessage;
List<MyPojo> output;
}
public class MyPojo{
}
public class User extends MyPojo {
private String id;
@NotBlank
private String userName;
private String companyId;
}
My Controller class looks like something below.
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.http.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.io.IOException;
@RestController
@RequestMapping("/test")
public class SampleRestController {
@GetMapping("/api")
public MyResponse testApi(){
RestTemplate restTemplate = new RestTemplate();
String url="http://<Domain>:8085/users/active";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> entity = new HttpEntity<String>("header",headers);
final ResponseEntity<String> responseEntity = restTemplate.exchange( url, HttpMethod.GET, entity, String.class );
MyResponse myResponse = null;
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility( PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
mapper.enable( DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
try {
myResponse = mapper.readValue(responseEntity.getBody(), MyResponse.class);
} catch (IOException e) {
e.printStackTrace();
}
return myResponse;
}
}
Please point out my mistake, I am not able to figure it out. Any help will be appreciated.
Upvotes: 2
Views: 8951
Reputation: 642
To map user attribute you need to have UserResponse-
@Getter
@Setter
@JsonIgnoreProperties(ignoreUnknown = true)
public class UserResponse extends MyPojo {
int responseCode;
String responseMessage;
List<User> output;
}
Similarly, for Product you'll need ProductResponse-
@Getter
@Setter
@JsonIgnoreProperties(ignoreUnknown = true)
public class ProductResponse extends MyPojo {
int responseCode;
String responseMessage;
List<Product> output;
}
also, define @Getter and @Setter annotation if not using currently.
@Getter
@Setter
public class User extends MyPojo {
private String id;
@NotBlank
private String userName;
private String companyId;
}
Upvotes: 2