私は今、しばらくの間、この課題を解決しようとしているのです。私は、JavaScriptの開発者ですが、春ブーツとJavaを実行しようとしていると問題に実行しています。以下のコードでは、私は書く方法を把握する必要があり@RestController
Userクラスで下に作成したユーザーのリストからJSONを返すためのロジックを。私は、これは私にすべて新しいものであるため、ことをやって行くのかではないと確信しています。
package usersExample;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
@RestController
public class UsersController {
/* Please insert your code here to make the tests pass */
}
@Service
class UserService {
public List<User> all() {
List<User> users = new ArrayList<User>();
users.add(new User("Bob"));
users.add(new User("Christina"));
users.add(new User("Steve"));
return users;
}
}
class User {
private final String name;
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
あなたが使用しているので@RestController
、戻り値は、すでにあるJSON(それはすでにジャクソンライブラリが含まれているため、スプリングブーツは、追加の依存関係を追加することなく、変換を行います)。あなたは、単に戻りますあなたのコントローラのメソッドを作成することができList
、ユーザのを。あなたのコードについての一つのコメントは:のように、適切なメソッド名を使用するfindAll()
代わりにall()
。
@GetMapping("/find-all")
public List<User> findAll()
{
return userService.findAll();
}
PSは:あなたが追加したコードは、あなたが実行している1と同じである場合には、私はあなたのために別のクラスを作成することをお勧めUser
してUserService
。
EDIT:JSONオブジェクトに単純なオブジェクトの変換は、ゲッターを使用して行われます。それはどのように働いていますか?のはあなたの例を見てみましょう:
class User {
private final String name;
public String getName() {
return name;
}
}
コンバータが始まるメソッドを探しますget
:キーワードとセットのすべての最初の文字と属性名を小文字に変換して、属性のみ、この手段は、(あなたが唯一の1ゲッターを持っているので)、このようになりますことを後にname : -value here-
。
今、あなたは、のようないくつかの質問をすることができます。
1)
Q:あなたが変更した場合はどうなりgetName()
方法はにgetname()
?
A:同じように動作します
2)
Q:あなたは、フィールドへのゲッターを提供しない場合はどうなりますか?
A:フィールドはJSONプロパティに変換されることはありません
3)
Q:あなたが変更した場合はどうなりgetName()
に方法をgetMyName()
?
:属性名は次のようになりますmyName: -value-
したがって、これらがされている場合は、あなたのJSONの構造を変更したい場合は、多くのソリューションがあり、言いました:
1)ゲッターの名前を変更します(実際にはお勧めしません)
2)@JsonPropertyアノテーションを使用してください。例えば:
private String name;
@JsonProperty("name")
public String thismethodwontworkwithoutjsonproperty() {
return this.name;
}
3)DTOオブジェクトを作成UserDTO
し、代わりにこれを返しますUser
。そして、あなたのコントローラであなたはuserDTOオブジェクトにユーザーを変換することができます。
public class UserDTO {
private String fullName;
//getter; setter;
}
そして
public class User {
private String firstName;
private String lastName;
//getter;setter;
}
そして最終的に、あなたはこのような変換を行います。
@GetMapping("/getUser")
public User returnUser() {
User user = new User();
user.setFirstName("Stack");
user.setLastName("Overflow");
UserDto userDto = convertUser(user);
return userDto;
}
private UserDTO convertUser(User user) {
UserDTO userDTO = new UserDTO();
userDTO.setFullName(user.getFirstName() + " " + user.getLastName());
return userDTO;
}
しかし、私はあなたのアプリケーションを構築して追加するようにお勧めしfacade
作成するのではなく、この変換を行います層convertUser()
コントローラのメソッドを。
出力:
{
"fullName":"Stack Overflow";
}